我正在尝试使用 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 的实际错误消息,我想返回该错误消息。我目前可以通过使用不同的对象再次调用来捕获错误来破解它,但这似乎很疯狂。必须有更好的方法来做到这一点。需要明确的是,这不是从客户端返回的实际错误状态......数据只是不同,但它破坏了反序列化。
有人有建议吗?