spring - 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 。有春天的方式来处理它吗?
解决方案
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...
}
推荐阅读
- javascript - HTML 多步骤表单在移动设备上不起作用
- angular - Angular Elements(自定义元素)在 DOM 中不可见
- algorithm - 在有向图中找到有保证的祖先
- visual-studio-2019 - Nuget包展示顺序
- c# - System.InvalidOperationException:枚举操作可能无法执行 - 间歇性出现
- svg - 如何平滑 SVG 线条
- node.js - 通过 express+multer 上传大文件失败
- javascript - 为什么我的选择选项在网页中被禁用
- python - spyder 中的 iPython 控制台锁定 Windows 文件资源管理器
- angular - 在 Angular 12 中使用 Google OAuth 和 @angular/fire@^7.0.0 firebase@^9.0.0