Ant*_*nyW 8 java jackson spring-boot
我在Spring中使用Jackson将我的类序列化为JSON.当我像下面的例子一样序列化一个类时,Jackson正在将某些字段的名称从Camel Case更改为小写.我知道我可以通过创建自定义(de)序列化器来解决这个问题,但我希望能够全局关闭它.也许通过在application.properties中设置属性.
根据默认的Jackson命名策略,这不应该发生:
如果没有注册的自定义策略,则使用默认的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);
}
Run Code Online (Sandbox Code Playgroud)
预期:
{"firstName":"first","name":"name","abName":"ab"," aName ":"a"}
实际:
{"firstName":"first","name":"name","abName":"ab"," aname ":"a"}
编辑:
将问题缩小到解释吸气剂.开始看起来像杰克逊的一个错误.
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getaName() {
return this.aName;
}
}
Run Code Online (Sandbox Code Playgroud)
序列化为 {"aName":"a"}
然而,
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
public String getAName() {
return this.aName;
}
}
Run Code Online (Sandbox Code Playgroud)
序列化为 {"aname":"a"}
var*_*ren 11
这里的问题更多是关于JavaBeans(TM)规范.根据规格(第58页)
但是为了支持偶尔使用所有大写字母名称,我们检查名称的前两个字符是否都是大写字母,如果是这样的话,请不要管它
"FooBah"成为"fooBah"
"Z"变为"z"
"网址"变为"网址"
而且你有一个带有aName字段的边缘情况.因为如果getter看起来像AName(),那么当你从这个getter转换回来时,你应该根据规范查找AName字段.这是其他信息说明
因此,要解决此问题,您可以在字段/ getter上方使用正确的getter(getaName())或@JsonProperty("aName")注释
这是类似的问题
小智 5
虽然我不确定杰克逊为什么读到getAName,aname但可以强迫杰克逊使用某个带有 的名字@JsonProperty("AName")。例如:
class Foo {
private final String aName;
Foo(final String aName) {
this.aName = aName;
}
@JsonProperty("AName")
public String getAName() {
return this.aName;
}
}
Run Code Online (Sandbox Code Playgroud)
(从这个密切相关的问题中得到了这个解决方案。)
| 归档时间: |
|
| 查看次数: |
3605 次 |
| 最近记录: |