микропроцессоры весенней загрузки обрабатывают глобальный обработчик исключений без дублирования кода - PullRequest
0 голосов
/ 10 марта 2019

У меня есть 3 микросервиса с пружинной загрузкой, бизнес-сервис, конечная точка которого доступна для общего пользования, и 2 базовых сервиса, которые бизнес-сервис вызывает через HTTP-вызовы.

Текущее исключение обрабатывается таким образом. У меня есть глобальные RestHandler и ApiError в каждой службе.

public class ApiError {
private HttpStatus status;
private String timestamp;
private final boolean hasError = true;
private List<Error> errors;

private ApiError() {
    timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}

public ApiError(HttpStatus status) {
    this();
    this.status = status;
}

public ApiError(HttpStatus status, Throwable ex) {
    this();
    this.status = status;
}

public HttpStatus getStatus() {
    return status;
}

public void setStatus(HttpStatus status) {
    this.status = status;
}

public String getTimestamp() {
    return timestamp;
}

public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
}

public boolean isHasError() {
    return hasError;
}

public List<Error> getErrors() {
    return errors;
}

public void setErrors(List<Error> errors) {
    this.errors = errors;
}

}

Скажем, я получаю исключение в одном из двух базовых сервисов, я обрабатываю его в глобальном обработчике исключений, сериализую и связываю его с ApiError и возвращаю ResponseEntity с помощью связанного ApiError.

В бизнес-сервисе я десериализирую тело, снова связываю его с ApiError и отправляю ответ обратно.

Это добавляет много дублирования кода. Я думал о том, чтобы просто выбросить исключения из базовых микросервисов, перехватить их в бизнес-сервисе и обработать в глобальном обработчике, чтобы получить пользовательский ответ.

Это эффективно? или это можно сделать лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...