gpt4 book ai didi

java - jackson 与 JSON : private attributes instead of public

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:35 28 4
gpt4 key购买 nike

我正在尝试反序列化以下 JSON:

{
"name": "TEST",
"data": [["Toto", true, 42], ["ABC", "DEF", false]]
}

“data”值是 JSON 元素列表(字符串、整数或 boolean 值)。

我使用具有公共(public)属性的简单 POJO 使其工作:

public class MyDecoder {
public String name;
public List<List<Object>> data;
}

但是现在,我希望我的属性是私有(private)的,所以我使用构造函数:

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: Unrecognized field "data" (Class XXX.MyDecoder), not marked as ignorable

我错过了什么?我猜它与List<List<Object>> data有关,因为 jackson 对String name没有任何问题。 。但是,我不明白为什么它在具有公共(public)属性的版本中起作用。

我使用的是 Jackson 2.7.5。

谢谢!

最佳答案

尝试添加 getter 和 setter:

public class MyDecoder {
public String name;
public List<List<Object>> data;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<List<Object>> getData() {
return data;
}

public void setData(List<List<Object>> data) {
this.data = data;
}
}

并测试它:

public class Test {

public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
MyDecoder myDecoder = objectMapper.readValue("{\n" +
" \"name\": \"TEST\",\n" +
" \"data\": [[\"Toto\", true, 42], [\"ABC\", \"DEF\", false]]\n" +
"}", MyDecoder.class);

System.out.println(myDecoder.toString());
}

}

关于java - jackson 与 JSON : private attributes instead of public,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48667796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com