RestTemplate попробуйте поймать

Я читаю ResponseEntity из веб-службы, используя приведенный ниже код Java (Spring 2.0):

public ResponseEntity<?> getTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<?> myResponse= restTemplate.postForEntity(
            myUrl, 
            myRequestObj, 
            MyResponseObj.class);
            
    return myResponse;
}

Однако, если веб-сервис myUrl возвращает HttpStatus.BAD_REQUEST (400), это не назначается myResponse и выдается ошибка, поэтому ResponseBody нет, и мне нужно заключить запрос в блок try catch. Это правильно или есть способ обойти это? Кроме того, означает ли это, что веб-сервис myUrl никогда не должен намеренно (программно) устанавливать HttpStatus myResponseObj на HttpStatus.BAD_REQUEST? Таким образом, даже если myRequestObj содержит неверные данные, myUrl webService все равно должен установить статус ответа примерно на 200, то есть HttpStatus.NO_CONTENT. Любые комментарии о том, как это сделать правильно, приветствуются.

1 ответ

Решение

Это правильно или есть способ обойти это?

Описываемое вами поведение определяется обработчиком ошибок пружины detault, который выдает HttpClientErrorException в случае кода состояния в диапазоне 400-499, HttpServerErrorException в случае кода состояния в диапазоне 500-599 и UnknownHttpStatusCodeExceptionесли код состояния неизвестен. Чтобы обрабатывать такие коды ошибок, вы можете либо перехватить исключения, либо зарегистрировать собственный обработчик исключений, как описано здесь.

Кроме того, означает ли это, что веб-сервис myUrl никогда не должен намеренно (программно) устанавливать HttpStatus myResponseObj на HttpStatus.BAD_REQUEST?

Согласно RFC 7231, код состояния 400 используется, чтобы указать, что сервер не может или не будет обрабатывать запрос из-за ошибки, совершенной клиентом при создании запроса (например, неверный синтаксис запроса, недопустимое формирование сообщения запроса или вводящий в заблуждение маршрутизация запросов). Следовательно, вы можете использовать этот код состояния, чтобы указать клиенту на такое поведение.

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