java - 如何处理可以根据结果数据返回不同 JSON 数据结构的 API 调用
问题描述
我正在尝试使用 RestTemplate 交换编写代码来查询返回歌曲信息的 API。问题是找到数据时数据看起来像这样,但是
{"search":[{"song_id":"4R9o2J","song_title":"xxxx", ...}]
但是如果找不到这首歌就这样
{"search":{"error":"no result"}}
读取有效数据时,我的结果对象如下所示
Data
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SongSearch {
List<SongInfo> search;
}
问题是当数据有效时,没有包含信息数组的属性......它是“搜索”的内容:[{....}] 所以我无法创建一个属性即使 not found 消息具有 error 属性,也会在未找到时被忽略。换句话说,搜索属性可以包含一个数组或单个属性,具体取决于是否找到了数据。
我的交换电话如下所示:
ResponseEntity<SongSearch> res = restTemplate.exchange(url, HttpMethod.GET, entity, SongSearch.class);
我已经能够编写在未找到的情况下捕获反序列化异常的代码,但该异常不包含来自 API 的实际错误消息,我想返回该错误消息。我目前可以通过使用不同的对象再次调用来捕获错误来破解它,但这似乎很疯狂。必须有更好的方法来做到这一点。需要明确的是,这不是从客户端返回的实际错误状态......数据只是不同,但它破坏了反序列化。
有人有建议吗?
解决方案
推荐阅读
- css - 在 Internet Explorer 上自动滚动时遇到问题
- c++ - 在 C++ 中使用运算符重载添加相同的类对象返回值
- java - 如何通过 JPA 模型类列表批量删除
- angular - 如何在 Angular 中实现这样的块状演示?
- c - 链表插入和反向输出
- php - 使用带有子域的 htaccess 将所有重定向到 index.php
- reactjs - 使用 Webpack 在 Electron 项目中使用外部目录中的组件
- javascript - TypeError:无法读取未定义 CryptoJS 的属性“0”
- javascript - Fullcalendar 如何将日期格式更改为英国日历格式
- java - 如何为使用未知参数调用另一个方法的方法编写 Mockito 测试?