首页 > 解决方案 > Spring http状态码 - java.lang.IllegalArgumentException:没有匹配的常量

问题描述

我正在使用 Spring rest-template 调用其余 URL,我从服务器收到响应,但 http-status 代码无效并且 Spring 抛出 java.lang.IllegalArgumentException: No matching constant 。由于这个异常,应用程序失败了,这看起来像是 Spring 代码中的一个错误。由于收到的 http 状态码不在列表中,spring framework is looking forit failed 。有春天的方式来处理它吗?

标签: springhttp-status-codesspring-rest

解决方案


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...
}

推荐阅读