我在Spring中使用傑克遜將我的類序列化爲JSON。當我像下面的例子一樣序列化一個類時,Jackson將某些字段的名稱從Camel Case更改爲小寫字母。我知道我可以通過創建自定義(de)序列化器來解決此問題,但我希望能夠在全局範圍內關閉此功能。也許通過在application.properties中設置一個屬性。停止傑克遜從變化的名稱變量名稱
每default Jackson naming strategy,這是不應該發生的:
在沒有註冊的自定義策略,默認的Java屬性命名策略被使用,這讓字段名是...
class Foo {
private final String firstName;
private final String aName;
private final String name;
private final String abName;
Foo(final String firstName, final String aName, final String name, final String abName) {
this.firstName = firstName;
this.aName = aName;
this.name = name;
this.abName = abName;
}
// Getters here
}
public static void main(String[] args) {
final ObjectMapper mapper = new ObjectMapper();
final Foo foo = new Foo("first", "a", "name", "ab");
final String jsonInString = mapper.writeValueAsString(foo);
System.out.println(jsonInString);
}
預計:
{ 「名字」: 「第一」, 「名」:「南E 「 」abName「: 」AB「,」 aName 「:」 一個 「}
實際:
{」 名字 「:」 第一」, 「名稱」: 「姓名」, 「abName」: 「AB」, 「aname 」:「 一」}
編輯:
縮小問題下到干將解釋。開始在傑克遜看起來像一個bug。
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getaName() {
return this.aName;
}
}
序列化爲{"aName":"a"}
然而,
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getAName() {
return this.aName;
}
}
序列化爲{"aname":"a"}
使用'@JsonProperty( 「AName」)'你就完成了 – Optional