Грамотная обработка ошибок 404 с помощью Spring RestClientJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Грамотная обработка ошибок 404 с помощью Spring RestClient

Сообщение Anonymous »

В настоящее время я работаю с новым RestClient в Spring Boot 3.2/Spring Framework 5.1 и столкнулся с проблемой обработки ошибок 404. Моя цель — корректно обрабатывать эти ошибки, не вызывая сбоя последующих шагов моего кода, особенно при преобразовании тела ответа.
Пример:

Код: Выделить всё

class CmsClient {
pubic Policy getPolicy() {
return restClient.get()
.uri("some/url")
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(ignore404())
.body(Policy.class);
}

public static ResponseErrorHandler ignore404() {
return new ResponseErrorHandler() {

@Override
public boolean hasError(final ClientHttpResponse response) throws IOException {
return response.getStatusCode() == HttpStatus.NOT_FOUND;
}

@Override
public void handleError(final ClientHttpResponse response) {
//Do nothing
}
};
}
}
Это исключение:

Код: Выделить всё

org.springframework.web.client.RestClientException: Error while extracting response for type [package.Policy] and content type [application/json]
at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:216)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:641)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:589)
at package.CmsClient.getPolicy(CmsClient.java:27)
at package.CmsClientTest.getPolicy_404_ThrowException_Test(CmsClientTest.java:61)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: No content to map due to end-of-input
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)
at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:200)
... 7 more
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to map due to end-of-input
at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 0]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)
at com.fasterxml.jackson.databind.ObjectReader._initForReading(ObjectReader.java:360)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2095)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)
... 9 more
Я ожидаю, что метод .body(Policy.class); должен возвращать значение null вместо того, чтобы вызывать исключение из-за MismatchedInputException. Такое поведение соответствует тому, что ранее наблюдалось в WebClient, и я ожидал аналогичного подхода в этом контексте.
Текущее решение: в качестве временной меры можно указать String.class в теле вызов метода. Однако такой подход снижает гибкость и простоту кода, что требует дополнительной обработки с помощью ObjectMapper и подобных инструментов.

Подробнее здесь: https://stackoverflow.com/questions/775 ... restclient
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему настройка SimpleClientHttpRequestFactory Resolve 404 ошибки в Spring RestClient?
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Spring Restclient.Exchange Null Response Обработка отклика весной 6.2.3
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Spring Restclient.Exchange Null Response Обработка отклика весной 6.2.3
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как лучше всего вернуть различные типы ResponseEntity в Spring-Boot (обработка ошибок для REST с помощью Spring)
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как лучше всего вернуть различные типы ResponseEntity в Spring-Boot (обработка ошибок для REST с помощью Spring)
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»