Spring HTTP状态码-java.lang.IllegalArgumentException:没有匹配的常量

时间:2019-07-01 21:45:51

标签: spring http-status-codes spring-rest

我正在使用Spring rest-template来调用rest URL,我从服务器获得了响应,但是http状态代码无效,Spring抛出了java.lang.IllegalArgumentException:没有匹配的常量。由于此异常,应用程序失败了,这看起来像Spring代码中的错误。由于收到的http状态代码不在列表中,因此spring框架正在寻找失败。有春季的处理方式吗?

1 个答案:

答案 0 :(得分:0)

Spring似乎在其枚举中使用标准状态代码。您可以在这里找到状态代码:org.springframework.http.HttpStatus

您正在查询的API可能未返回标准的HTTP状态代码。最好的选择是创建一个自定义错误处理程序,如下所示:

var r = new RestTemplate();

r.setErrorHandler(new ResponseErrorHandler() {
  @Override
  public boolean hasError(ClientHttpResponse response) throws IOException {
    return response.getRawStatusCode() != 550;
  }

  @Override
  public void handleError(ClientHttpResponse response) {
    // Do nothing?
  }
});

var response = r.exchange("https://httpbin.org/status/550", HttpMethod.GET, null, String.class);

System.out.println(response.getStatusCodeValue());

我们所说的基本上是,如果返回的状态代码是550(不是标准代码),我们就不希望对此做任何事情。

当然,您还有另一个选择,就是捕获异常并对异常进行处理。

try {
  // Call the API here
} catch (IllegalArgumentException e) {
  // Do something about it here...
}