【发布时间】:2014-10-14 00:38:57
【问题描述】:
我正在使用 jackson-core、databind、annotations 2.3.3 jar。我有以下简单的类
public class ClassA {
private int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
下面是尝试将 JSON 字符串反序列化为对象的代码:
import com.fasterxml.jackson.databind.ObjectMapper;
...
final ObjectMapper objectMapper = new ObjectMapper();
ClassA request = objectMapper.readValue("{\"Value\": 1}", ClassA.class);
但我收到以下错误: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“Value”(ClassA 类),未标记为可忽略(一个已知属性:“value”]) 在 [来源:java.io.StringReader@3bff5976; line: 1, column: 12] (通过引用链: ClassA["Value"])
如果我将 JSON 字符串更改为小写,那么它可以工作。我认为杰克逊可以通过遵循 setter 约定将值映射到 setter。我知道我可以将 JsonProperty 注释添加到 ClassA 以使其工作,但在我的情况下我无法修改 ClassA。
我还尝试在调用 readValue 之前显式启用以下映射功能,但仍然出现相同的错误:
import com.fasterxml.jackson.databind.MapperFeature;
...
objectMapper.enable(MapperFeature.AUTO_DETECT_GETTERS);
objectMapper.enable(MapperFeature.AUTO_DETECT_SETTERS);
我怎样才能让 Jackson 绑定到标准 getter/setter(getXxx 和 setXxx)而不为被绑定的类指定注释?
谢谢!
【问题讨论】:
-
我认为这是因为您的 JSON 字符串是
Value而不是value。你的 JSON 属性会像这样大写吗?
标签: java json serialization jackson