Код состояния Spring HTTP - java.lang.IllegalArgumentException: нет соответствующей константы

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

0
0
5 325
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме