我正在使用傑克遜序列化/反序列化不可變的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