Я использую Spring rest-шаблон для вызова остальных URL-адресов, я получаю ответ от сервера, но код http-статуса недействителен, и Spring выдает java.lang.IllegalArgumentException: Нет соответствующей константы. Из-за этого исключения приложение не работает, это похоже на ошибку в коде Spring. Поскольку полученный код состояния http отсутствует в списке, Spring Framework ищет его неудачно. Есть ли способ Spring справиться с этим?
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...
}