Я хочу создать обработчик ошибок для своего клиента Feign, поэтому я создал CustomErrorDecoder, обновил конфигурацию Feign для использования этого нового декодера ошибок, создал собственные исключения и, наконец, выдал исключение. Однако при возникновении исключения я получаю эту ошибку и не знаю, в чем проблема. Вот сообщение об ошибке:
Обработка запроса не удалась; вложенное исключение
fr.application.configuration.Exceptions.NotFoundException:
произошла ошибка. error.already_closed_or_unknown в
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
~[spring-webmvc-5.3.9.jar:5.3.9] в
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
~[spring-webmvc-5.3.9.jar:5.3.9]
это декодер ошибок:
public class CustomErrorDecoder implements ErrorDecoder {
private final ErrorDecoder defaultErrorDecoder = new Default();
@Override
public Exception decode(String methodKey, Response response) {
ErrorMessage message;
try (InputStream bodyIs = response.body()
.asInputStream()) {
ObjectMapper mapper = new ObjectMapper();
message = mapper.readValue(bodyIs, ErrorMessage.class);
} catch (IOException e) {
return new Exception(e.getMessage());
}
return switch (response.status()) {
case 400 -> new BadRequestException(message.getMessage() != null ? message.getMessage() : "Bad Request");
case 404 -> new NotFoundException(message.getErrorCode() != null ? message.getErrorCode() : "Not found");
default -> defaultErrorDecoder.decode(methodKey, response);
};
}
}
конфигурация feign:
private static T createClient(Class clientClass, String baseUrl) {
BUSINESS_LOGGER.info("Creating client for class {} with base URL {}", clientClass, baseUrl);
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.errorDecoder(new CustomErrorDecoder())
.logger(new Slf4jLogger(clientClass))
.logLevel(feign.Logger.Level.FULL)
.target(clientClass, baseUrl);
}
и вот как я создаю исключение
try {
return apiClient.endPoint(Url,
body);
} catch (NotFoundException | BadRequestException | InternalServerErrorException e) {
BUSINESS_LOGGER.error( e.getMessage());
throw e;
}
и endPint моего притворного клиента
@RequestLine("POST {endpoint}")
@Headers({
"Content-Type: application/json",
})
ObjectDto endPoint( @Param("endpoint") String endpoint, ObjectDto object);
Подробнее здесь: https://stackoverflow.com/questions/790 ... -exception
Притворная ошибка декодера: Ошибка обработки запроса; вложенное исключение ⇐ JAVA
Программисты JAVA общаются здесь
1727434951
Anonymous
Я хочу создать обработчик ошибок для своего клиента Feign, поэтому я создал [b]CustomErrorDecoder[/b], обновил конфигурацию Feign для использования этого нового декодера ошибок, создал собственные исключения и, наконец, выдал исключение. Однако при возникновении исключения я получаю эту ошибку и не знаю, в чем проблема. Вот сообщение об ошибке:
Обработка запроса не удалась; вложенное исключение
fr.application.configuration.Exceptions.NotFoundException:
произошла ошибка. error.already_closed_or_unknown в
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
~[spring-webmvc-5.3.9.jar:5.3.9] в
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
~[spring-webmvc-5.3.9.jar:5.3.9]
это декодер ошибок:
public class CustomErrorDecoder implements ErrorDecoder {
private final ErrorDecoder defaultErrorDecoder = new Default();
@Override
public Exception decode(String methodKey, Response response) {
ErrorMessage message;
try (InputStream bodyIs = response.body()
.asInputStream()) {
ObjectMapper mapper = new ObjectMapper();
message = mapper.readValue(bodyIs, ErrorMessage.class);
} catch (IOException e) {
return new Exception(e.getMessage());
}
return switch (response.status()) {
case 400 -> new BadRequestException(message.getMessage() != null ? message.getMessage() : "Bad Request");
case 404 -> new NotFoundException(message.getErrorCode() != null ? message.getErrorCode() : "Not found");
default -> defaultErrorDecoder.decode(methodKey, response);
};
}
}
конфигурация feign:
private static T createClient(Class clientClass, String baseUrl) {
BUSINESS_LOGGER.info("Creating client for class {} with base URL {}", clientClass, baseUrl);
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.errorDecoder(new CustomErrorDecoder())
.logger(new Slf4jLogger(clientClass))
.logLevel(feign.Logger.Level.FULL)
.target(clientClass, baseUrl);
}
и вот как я создаю исключение
try {
return apiClient.endPoint(Url,
body);
} catch (NotFoundException | BadRequestException | InternalServerErrorException e) {
BUSINESS_LOGGER.error( e.getMessage());
throw e;
}
и endPint моего притворного клиента
@RequestLine("POST {endpoint}")
@Headers({
"Content-Type: application/json",
})
ObjectDto endPoint( @Param("endpoint") String endpoint, ObjectDto object);
Подробнее здесь: [url]https://stackoverflow.com/questions/79030503/feign-error-decoder-error-request-processing-failed-nested-exception[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия