问题描述
我有一个不变的类,定义为:
@Value
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ImmutableDTO {
(...)
}
由于不可变,我想反序列化通过构造函数表示的JSON。 我想避免必须使用@ConstructorProperties或@PropertyNames显式标记绑定属性。
1。因此,首先,我试图寻找一种仅靠杰克逊来做到这一点的方法,因为在其他情况下,杰克逊足够聪明。在pom.xml上添加ParameterNames模块并定义构造函数
@AllArgsConstructor(access = AccessLevel.PRIVATE,onConstructor_= {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
似乎是徒劳的,因为似乎每种方式都需要标记每个属性。
2。因此,我寻找了Lombok解决方案。我最喜欢的方法是找到一个显式注释,该注释标记用于生成构造函数属性的特定构造函数,但我找不到它
3。作为后备,我依靠lombok.anyConstructor.addConstructorProperties = true
全局lombok.config设置,但是随后为我的两个构造器的属性添加了注释,因此最终出现错误:com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Conflicting property-based creators:
。我找不到lombok工具来从属性标记生成中选择退出特定的构造函数(类似于旧式 @RequiredArgsConstructor(suppressConstructorProperties = true)
)
那么,有什么方法可以完成我的任何方法(按优先顺序排列),或者至少完成任何一种方法?
PS:因为我的@Builder正在预先计算某些字段,所以我不能使用@JsonDeserialize(builder = (...))
工具,即使用替代构造函数(这就是为什么我同时需要这两个原因,一个用于Jackson,另一个用于通过代码进行操作(生成器),其中包含已计算的字段)
P.S2:我研究了启动选项jackson.mapper.infer_creator_from_constructor_properties: true
,但是我做错了什么,或者只是将显式功能(否则将jackson-module-parameter-names
导入pom.xml时会自动注册)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)