我正在使用杰克逊序列化/反序列化不可变的POJO。由于POJO是不可改变的,我将它们定义是这样的:杰克逊:允许财产命名策略与@JsonCreator合作
class Foo {
private final String bar;
private final String wibbleBoing;
@JsonCreator
public Foo(@JsonProperty("bar") String bar, @JsonProperty("wibbleBoing") wibbleBoing) {
this.bar = bar;
this.wibbleBoing = wibbleBoing;
}
... [getters] ...
}
我被迫使用@JsonProperty
在构造函数的参数为Java字节码不包含参数名称。 [其实,我知道可以可以用于Java 8,而我可能用用jackson-module-parameter-names
来规避这种情况,但目前这不是我的选择]。
现在,让我们假设我也想使用属性命名策略,以便我可以将所有属性名称更改为带小写字母的下划线而不是骆驼大小写,并且以这种方式我不会必须改变我现有的POJO。
在杰克逊2.3,这工作的一种享受。然而,在杰克逊2.4中,明确命名@JsonProperty
-annotated构造函数参数似乎超过了命名策略。
在我的POJO中重命名所有@JsonProperty
注解是一个泄漏的抽象,我宁愿不这样做......所以还有另一种方法可以设置我的映射器或在全局范围内执行某些操作以将属性命名策略应用于这样的构造函数参数?
感谢 - 这通过重写'findNameForDeserialization'和'findImplicitPropertyName'。诀窍是通过使'findNameForDeserialization'返回'null'并使'findImplicitPropertyName'返回值来让Jackson相信这个声明是隐式的而非明确的。啊。 – Kkkev