spring 带对象的Java示例

lf3rwulv  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(147)

我有一个使用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;

}
x6yk4ghg

x6yk4ghg1#

由于您的第三方API使用相同的http代码返回不同的模式(这让我感觉不对劲),因此您无法使用RestTemplate获取所需的对象-您不知道对象类型。
您可以将RestTemplate响应作为String获取,使用ObjectMapper(Jackson)将其解析为JsonNode。然后通过一些告诉属性来确定这是哪个模式。使用ObjectMapper将响应字符串解析为定义的类型。

相关问题