gpt4 book ai didi

java - RestTemplate JSON 反序列化

转载 作者:行者123 更新时间:2023-11-30 05:44:54 24 4
gpt4 key购买 nike

因此,我们假设我们有两个系统(系统 A 和系统 B)以 JSON 形式交换信息,但是,系统 B 的人员并不想真正合作,并声称其有效负载的一切都很好,因为它是“语法上”正确的 JSON。

现在假设您有以下 json 结构

   {
"INFO": {
"Animal": {
"Cat": {}
}
}
}

这确实是一个有效的 JSON,但问题是您可以拥有一只或多只动物,因此在有更多动物的情况下,有效负载为:

   {
"INFO": {
"Animal": [{
"Cat": {},
"Dog" :{}
}]
}
}

只有这一次,您可以看到 Animal 对象实际上是一个对象数组...因此系统 A 使用 RestTemplate 来解析响应,并且存在问题,因为“语法上”正确的 JSON 每次的结构都不同。此外,JSON 中也可能出现错误 - 如果出现错误,JSON 如下所示: "ERRORS": {[error1, error2, etc.]},

但如果没有错误,它会显示为

"ERRORS" : ""

所以请告诉我,我希望有效负载保持一致并始终像对象数组一样,无论是一个还是多个,并且在没有错误的情况下不会得到错误节点,这是错误的,还是我遗漏了一些东西?

我正在使用 RestTemplate 和

当有效负载带有一个动物时(我的 pojo 需要 1 个或多个)-> 它会失败,因为它无法将单个对象解析为数组列表。

如果我将其更改为只期望一只动物 - 当不止一只动物出现时它就会失败。

不仅如此 - “错误”:“”被视为字符串,这再次导致解析问题。

那么是否有一些“黑客”方法可以使 RestTemplate 中的 Jackson 反序列化器处理这个“语法上”正确的 JSON,或者 JSON 的整体结构应该澄清和一致(我的意见)

谢谢!

最佳答案

看起来您想要启用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY在您的ObjectMapper中:

ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

关于java - RestTemplate JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028378/

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