Java instanceof with Object



我有一个使用Java 17的spring引导项目。我正在调用第三方API来获取记录列表。如果记录存在,我确实会得到200 OK响应和记录列表,如果记录不存在,我确实会得到200 OK响应和另一个JSON模式。为了验证响应是否为记录类型列表或错误,我使用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;
}

由于您的第三方API使用相同的http代码返回不同的模式(这对我来说很难闻),因此您不能使用RestTemplate获得所需的对象-您不知道对象类型。
您可以将RestTemplate响应作为String,使用ObjectMapper (Jackson)将其解析为JsonNode。然后通过一些属性来决定这是哪个模式。并使用ObjectMapper将响应字符串解析为定义的类型。

相关内容

最新更新