我正在尝试反序列化以下JSON:
{
"name": "TEST",
"data": [["Toto", true, 42], ["ABC", "DEF", false]]
}
“data”值是JSON元素列表的列表(字符串,整数或布尔值) .
我使用具有公共属性的简单POJO使其工作:
public class MyDecoder {
public String name;
public List<List<Object>> data;
}
但是现在,我希望我的属性是私有的,所以我使用的是构造函数:
public class MyDecoder {
private String name;
private List<List<Object>> data;
public MyDecoder() {
}
@JsonCreator
public MyDecoder(
@JsonProperty("name") String name,
@JsonProperty("data") List<List<Object>> data)
{
this.name = name;
this.data = data;
}
}
但这是失败的:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“data”(类XXX.MyDecoder),未标记为可忽略
我错过了什么?我猜这与 List<List<Object>> data
有关,因为 Jackson 对 String name
没有任何问题 . 但是,我不明白为什么它在具有公共属性的版本中有效 .
我正在使用 Jackson 2.7.5 .
谢谢!
2 回答
至于警告,如果有一个JSON属性没有任何设置方法(通过可见的setter或字段,或带有@JsonProperty注释参数的@JsonCreator带注释的构造函数),将抛出异常 - 除非配置已更改忽略这种“未知”属性 .
你有这样的尝试吗?
尝试添加getter和setter:
并测试它: