Как обработать внутреннюю ошибку сервера (500) в Spring rest API, чтобы настроить сообщение? - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над весенним отдыхом API, и я хотел бы убедиться, что все работает нормально. Я хотел бы зарегистрировать ошибку соединения с базой данных ненормального поведения среди других, я работаю с базой данных couchbase и получаю ответ конечной точки, например, для такого рода исключения: CouchbaseQueryExecutionException следующее сообщение: Unable to execute query due to the following n1ql errors: \n{\"msg\":\"No index available on keyspace kids_club that matches your query. Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online.\",\"code\":4000} и оченьдлинная трассировка.

Для этого я нашел в Интернете решение, которое расширяет ResponseEntityExceptionHandler и переопределяет метод handleExceptionInternal следующим образом:

@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
    private static String DEFAULT_VALIDATION_ERROR_CODE = "KC-0020";

    @ExceptionHandler(MiddlewareException.class)
    protected ResponseEntity<ResponseBody> handleKidsClubException(MiddlewareException ex) {
        return buildErrorResponse(HttpStatus.valueOf(ex.getHttpStatus()), ex.toError());
    }

    @ExceptionHandler(ServiceUnavailableException.class)
    protected ResponseEntity<ResponseBody> handleServiceUnavailable(ServiceUnavailableException ex) {
        return buildErrorResponse(INTERNAL_SERVER_ERROR, ex);
    }

    @ExceptionHandler(NoSuchElementException.class)
    protected ResponseEntity<ResponseBody> handleNoFoundElement(NoSuchElementException ex) {
        return buildErrorResponse(NOT_FOUND, ex);
    }

    @ExceptionHandler(CouchbaseQueryExecutionException.class)
    protected ResponseEntity<ResponseBody> handleCouchbaseQueryException(ConstraintViolationException ex) {
        return buildErrorResponse(BAD_REQUEST, ex);
    }
}

Но я не могу поймать какой-либо тип внутреннего сервераОшибка в этом пути. Кажется, что весна - это ручка и создание окончательного сообщения для пользователя. Есть идеи, чтобы решить эту проблему? Спасибо.

1 Ответ

0 голосов
/ 10 октября 2019
@ExceptionHandler(NullPointerException.class)
public final ResponseEntity<Object> handleNullPointerException(NullPointerException ex, WebRequest request) {
    LOGGER.info("Entering into the handleAllException method");
    System.out.println("Exception is : " + ex.getClass());
    ResponseData error = new ResponseData();
    error.setRespCode(HttpStatus.NOT_FOUND.toString());
    error.setRespMessage(ex.getLocalizedMessage());
    error.setTimestamp(LocalDateTime.now());
    return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);



}

Пожалуйста, попробуйте этот способ ниже, чтобы проверить, можете ли вы поймать исключение или нет. Из системного поиска вы получите точное исключение. Затем вы можете использовать это исключение, чтобы перехватить любое конкретное исключение из этой бизнес-логики.

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