RestTemplate JSON反序列化

RestTemplate JSON Deserialization

所以让我们假设我们有两个系统(系统 A 和系统 B)在 JSON 中交换信息,但是,系统 B 的家伙不想真正合作并声称一切都与他们的有效负载很好,因为它 "syntactically" 正确 JSON.

现在假设您具有以下 json 结构

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

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

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

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

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

"ERRORS" : ""

所以请告诉我,我是否希望有效载荷保持一致并且总是得到一组对象,无论是一个还是多个,并且在没有错误的情况下没有错误节点,或者我错过了什么东西?

我正在使用 RestTemplate 并且

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

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

不仅如此 - "ERRORS" : "" 被视为字符串,这再次导致解析问题。

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

谢谢!

您似乎想在 ObjectMapper:

中启用 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);