我有一个使用Java 17的Sping Boot 项目。我调用第三方API来获取记录列表。如果记录存在,我会得到带有记录列表的200 OK响应,如果记录不存在,我会得到带有另一个JSON模式的200 OK响应。为了验证响应是记录列表类型还是错误类型,我使用了instanceof,但它不起作用,总是转到else条件。
HttpEntity<Void> request = new HttpEntity<>(httpHeaders);
ResponseEntity<Object> response = restTemplate.exchange(uri, HttpMethod.GET, request, Object.class);
if (response.getBody() instanceof ZohoError zohoError) {
return Collections.emptyList();
} else {
return (List<Leave>) response.getBody();
}
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class ZohoError {
private String message;
@JsonAlias("errorcode")
private String errorCode;
@JsonAlias("Response status")
private int responseStatus;
}
1条答案
按热度按时间x6yk4ghg1#
由于您的第三方API使用相同的http代码返回不同的模式(这让我感觉不对劲),因此您无法使用RestTemplate获取所需的对象-您不知道对象类型。
您可以将RestTemplate响应作为String获取,使用ObjectMapper(Jackson)将其解析为JsonNode。然后通过一些告诉属性来确定这是哪个模式。使用ObjectMapper将响应字符串解析为定义的类型。