【发布时间】:2020-04-30 13:07:09
【问题描述】:
我从 API 接收到这个 JSON:
"link": [],
"firstRecord": 1,
"item": [
{
"Customer": {
"id": "1058207",
"firstName": "foo",
"lastName": "foo2",
"nestedObj1": {
"id": "40008"
},
"nestedObj2": {
"link": [],
"linkfoo": "lala",
"item": [
{
"id": "266614",
"label": "NESTED_OBJ_2"
}
]
}
]
}
我的反序列化函数
@Override
public CustomerView deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
//tried this too
TreeNode treeNode = p.getCodec().readTree(p);
// also this
JsonNode node = p.getCodec().readTree(p);
JsonNode simpleNode = new ObjectMapper().readTree(p);
// use for each field that is not String
ObjectMapper mapper = new ObjectMapper();
Customer customer = new Customer();
customer.setFirstName(simpleNode.get("Customer").get("firstName").textValue());
NestedObj2[] arrayObj2 = mapper.readValue(
simpleNode.get("Customer").get("nestedObj2").get("item").toString(),
NestedObj2[].class);
customer.setArrayObj2(arrayObj2);
}
类 NestedObj2 具有 JSON 中的所有字段,“item”数组是作为字段的单独对象。
问题是,JsonNode 和 TreeNode 都没有看到字段“nestedObj2”,但其余字段在反序列化时都在其中 -> 在调试时检查。
我是否遗漏了配置中的某些内容,还是应该使用其他对象来反序列化?
谢谢!
编辑
最后,我按照@Mehrdad HosseinNejad 的建议使用了 DTO。
当我通过RestTemplate.exchange() 接收这个 JSON 时,我必须像这里 https://stackoverflow.com/a/9381832/12677470 一样配置 RestTemplate 和 MappingJacksonHttpMessageConverter。
【问题讨论】:
标签: java json spring-boot jackson json-deserialization