【发布时间】:2013-10-29 10:01:45
【问题描述】:
我已经在一个项目中使用 QueryDSL,并且想知道是否可以(ab)使用它来使我的 POJO 到 JSON 转换类型安全。目前我做这样的事情:
converter.toJson(entity, entity.getDetail(), "detail");
我想如果我能把它改成这样会很酷:
QEntity q = QEntity.entity;
converter.toJson(entity, q.detail);
然后,在 toJson 方法中使用 q.detail 参数来提取属性的名称以及调用实体上的 getter 来检索值.使用 EntityPathBase.getType().getSimpleClassName() 并使用 getter 的反射应该是可行的,但我想知道 QueryDSL 是否已经可以做到这一点。
结果我使用了 Path.getMetadata().getName(),它可用于查询实体并返回给定示例中的属性名称。结合 BeanMap 来检索属性值(正如 Timo 所建议的,谢谢!)。现在我不必让 getter 调用与字符串同步。当然这是一种权衡,因为现在使用反射,牺牲一些性能以获得更好的可维护性。
【问题讨论】:
-
你有这个转换器的代码在某个地方共享或者你可以共享它吗?我的项目中需要类似的功能,如果我能对此有所了解,那就太好了。谢谢! @jotomo
-
@avaz 代码对手头的任务相当专业,所以我将简要介绍一下它的工作原理。转换器使用Jackson构建树(使用ObjectMapper的createObject和createArrayNode方法)并使用上面的Path.getMetadata( ).getName() 来构建属性的名称。执行此操作的方法然后简单地传递一个查询实体,例如addPropertyToNode(node, entity, q.address.streetname)。 HTH。 (来源已关闭,抱歉)。
-
感谢您的洞察力,我想我可以按照这个方向进行操作,我会有所收获,问候!
标签: querydsl