当字段名称的第二个字母大写时,Jackson 似乎有问题。
获取值的映射:
aaBoolean, true // works
aBoolean, false // fails
anInt, 0 // works
aString, "a" // fails
我使用 Jackson'sObjectMapper.convertValue(map)创建了一个 Java 对象。下面是一段 Java 代码:
private boolean aaBoolean; // GOOD
public boolean getAaBoolean() { return aaBoolean; }
public void setAaBoolean(boolean value) { this.aaBoolean=value;}
private boolean aBoolean; // FAILS!!! Jackson "Unrecognized field"
public boolean getABoolean() { return aBoolean; }
public void setABoolean(boolean value) { this.aBoolean=value;}
我收到一条包含所有 18 个字段的错误消息。请注意,当大写是第二个字母时,驼峰案例失败:
Unrecognized field "aBoolean" (class Test), not marked as ignorable
(18 known properties: "anInt", "anullableBoolean", "aboolean", "aaBoolean",
"lastModifiedDate", "adate", "anullableDate", "astring", "anullableString",
"createdDate", "anullableFloat", "id", "along", "anullableLong", "createdBy",
"anullableInt", "lastModifiedBy", "afloat"])
如果我更改aBoolean为aaBoolean,则通过并且 Jackson 失败aString。
根据其他 Stack Overflow 帖子,我已验证字段名称和 getter/setter 匹配(aBooleanisgetABoolean()和aaBooleanis getAaBoolean())。
如果重要,这里是如何ObjectMapper创建的:
ObjectMapper mapper = new ObjectMapper();
mapper.setTimeZone(TimeZone.getTimeZone("CST"));
我可以发布完整的代码,但我认为以上就足够了。
我可以修改我的变量名来解决这个问题,但现在我很好奇 - 这是一个错误还是我错过了关于 Jackson 如何处理名称转换的一些信息?
汪汪一只猫
相关分类