使用QueryDSL以类型安全的方式访问属性

使用QueryDSL以类型安全的方式访问属性,querydsl,Querydsl,我已经在一个项目中使用了QueryDSL,我想知道是否可以(ab)使用它来确保POJO到JSON转换类型的安全性。目前我做的事情如下: toJson(entity,entity.getDetail(),“detail”) 我想如果我能把它改成这样会很酷: QEntity q = QEntity.entity; converter.toJson(entity, q.detail); 然后,在toJson方法中,使用q.detail参数提取属性的名称,并调用实体上的getter来检索值。使用Ent

我已经在一个项目中使用了QueryDSL,我想知道是否可以(ab)使用它来确保POJO到JSON转换类型的安全性。目前我做的事情如下:

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调用与字符串保持同步。当然,现在使用反射是一种折衷,牺牲了一些性能以获得更好的可维护性。

您可以使用Querydsl集合
GuavaHelpers
类来做类似的事情

尽管我不确定在这种情况下是否需要类型安全性,因为您的目标模型(JSON)不是静态类型的


如果您的用例是将Bean属性复制到JSON结构中,我可能只会在本例中使用Bean helper类,例如BeanMap。

您是否在某个地方共享了此转换器的代码,或者可以与其他人共享它?我在我的项目中需要类似的功能,如果我能对它有所了解,那就太好了。谢谢@jotomo@avaz这段代码对手头的任务相当专业,因此我将简要介绍它的总体工作原理。转换器使用Jackson构建树(使用ObjectMapper的createObject和createArrayNode方法),并使用上述路径.getMetadata().getName()构建属性的名称。执行此操作的方法只需传递一个查询实体,例如addPropertyToNode(节点、实体、q.address.streetname)。嗯。(来源已关闭,抱歉)。感谢您的洞察力,我想我可以按照这个方向到达某处,敬请!