我在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