Обработка ложного исключения при загрузке Spring с использованием RestControllerAdvice

У меня есть клиент Fiegn для отправки запроса на другой микросервис Springboot.

 @ExceptionHandler(FeignException.class)
    public ResponseEntity<ApiError> handleFeignException(FeignException ex, WebRequest webRequest) throws JsonProcessingException {
           try{
            ObjectMapper objectMapper = JsonMapper.builder()
                    .findAndAddModules()
                    .build();
            ApiError apiError = objectMapper.readValue(ex.contentUTF8(), ApiError.class);
               return new ResponseEntity<>(apiError, HttpStatusCode.valueOf(ex.status()));
    
        } catch (JsonProcessingException e) {
            log.error("Error deserializing Feign exception: {}", e.getMessage());
            ApiError fallbackError = new ApiError("Error deserializing Feign exception", LocalDate.now(), ex.status(), webRequest.getDescription(false));
            return ResponseEntity.status(HttpStatusCode.valueOf(ex.status()))
                    .body(fallbackError);
        }
    }
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class ApiError {
    private String message;
    private LocalDate timeStamp;
    private int status;
    private String requestPath;
}

Таким образом, я обрабатываю ложное исключение, выдаваемое симулирующим клиентом во время межсервисного взаимодействия между микросервисами весенней загрузки.... Есть ли другой хороший подход или я делаю это правильно?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
298
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

У вас есть другой способ обработки исключений, но я мог бы предложить вам использовать специальную ErrorDecoder в соответствии с Пользовательской обработкой ошибок на вики-странице OpenFeign.

В качестве примера:

public class CustomErrorDecoder implements ErrorDecoder {

    @Override
    public Exception decode(String methodKey, Response response) {
        if (response.status() >= 400 && response.status() <= 499) {
            return new StashClientException(
                    response.status(),
                    response.reason()
            );
        }
        if (response.status() >= 500 && response.status() <= 599) {
            return new StashServerException(
                    response.status(),
                    response.reason()
            );
        }
        return errorStatus(methodKey, response);
    }
}

После объявления создайте класс конфигурации. Помимо ErrorDecoder вы также можете объявить: пользовательские фильтры и перехватчики в этом классе.

@Configuration
public class MyFeignClientConfiguration {

    @Bean
    public ErrorDecoder errorDecoder() {
        return new CustomErrorDecoder();
    }
}

И в интерфейсе Feign у вас будет:

@FeignClient(
    value = "myFeignClient", 
    configuration = MyFeignClientConfiguration.class
)

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