Альтернативы обработки сообщений об исключениях Java в микросервисах REST?JAVA

Программисты JAVA общаются здесь
Anonymous
Альтернативы обработки сообщений об исключениях Java в микросервисах REST?

Сообщение Anonymous »

Контекст: Java SpringBoot, предоставляющий REST API
У меня есть RestControllerAdvice, который используется для возврата ответа с сообщением об исключениях, которые могут возникнуть во время бизнес-логики:

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

@Slf4j
@RestControllerAdvice
@RequiredArgsConstructor
public class ExceptionRestController {

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler({ FunctionalRuntimeException.class })
public DavinciApiResponse handleFunctionalRuntimeException(FunctionalRuntimeException exception) {
DavinciApiResponse response = ExceptionUtils.buildResponse(exception);
ExceptionUtils.logException(exception);
return response;
}

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({ ValidationException.class,
ConstraintViolationException.class })
public  DavinciApiResponse handleValidationException(E exception) {
DavinciApiResponse response = ExceptionUtils.buildResponse(exception);
ExceptionUtils.logException(exception);
return response;
}

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class)
public DavinciApiResponse handleAllUncaughtException(Exception exception) {
DavinciApiResponse response = ExceptionUtils.buildResponse(exception);
ExceptionUtils.logException(exception);
return response;
}

}
Должна ли команда внешнего интерфейса использовать сообщение об исключении, чтобы показать его конечному пользователю?

Из своего небольшого опыта работы я бы сказал да (это подход, который я всегда видел), но я с ним не совсем согласен...

Пример 1:

Мне нужно разработать многоязычное веб-приложение (АНГЛИЙСКИЙ, ФРАНЦУЗСКИЙ, ИСПАНСКИЙ)

Должен ли сервер поддерживать язык?

Я почти уверен, что ответ НЕТ. Ответственность за отображение страницы на языке, указанном пользователем, лежит на веб-интерфейсе, поэтому его задача — показывать пользователю соответствующее сообщение об ошибке.

Пример 2:

Бэкэнд использует библиотеки с открытым исходным кодом, которые выдают исключения RuntimeExceptions.

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

Возможное решение, которое я думал для обработки сообщений об исключениях на нескольких языках, — это создать новый микросервис для обработки исключений бизнес-логики:
  • API внешнего вызова микросервиса A
  • в API было выдано исключение бизнес-логики, поэтому в качестве ответа он возвращает объект содержащий messageCode (УНИКАЛЬНЫЙ КОД для идентификации сообщения) и messageParams (параметры кода сообщения).
  • интерфейс затем вызывает API «исключений бизнес-логики микросервиса», передавая в качестве запроса объект, содержащий messageCode, messageParams и язык
  • "Исключения бизнес-логики микросервиса" возвращают сообщение об исключении, переведенное на требуемый язык, например, путем извлечения сообщения из базы данных с передачей messageCode.
Как вы обрабатываете сообщение об исключении?
Каковы альтернативы?

Подробнее здесь: https://stackoverflow.com/questions/786 ... roservices

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