为了账号安全,请及时绑定邮箱和手机立即绑定

RestTemplate JSON 反序列化

RestTemplate JSON 反序列化

饮歌长啸 2022-07-20 20:17:58
所以让我们假设我们有两个系统(系统 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 个或多个)-> 它失败,因为它无法将单个对象解析为数组列表。如果我将它更改为只期望一只动物 - 当不止一只动物出现时它会失败。不仅如此 - "ERRORS" : "" 被视为一个字符串,这再次导致解析问题。那么是否有一些“hack”方法可以让 RestTemplate 中的 Jackson 反序列化器来处理这个“语法上”正确的 JSON,或者 JSON 的整体结构应该得到澄清和一致(我的观点)
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

看起来你想DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY在你的ObjectMapper:


ObjectMapper mapper = new ObjectMapper()

mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信