как получить доступ к ошибке пружины по умолчанию JSON - PullRequest
0 голосов
/ 23 апреля 2020

По умолчанию Spring возвращает сообщение:

{
    "timestamp": "2019-01-17T16:12:45.977+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Error processing the request!",
    "path": "/my-endpoint-with-exceptions"
}

. В настоящее время приложение использует @RestControllerAdvice с @ExceptionHandler для каждого исключения. В каждом методе, в котором он использует ResponseEntity

@ExceptionHandler(GenericException.class)
public ResponseEntity<String> exceptionHandler(GenericException ex){
 return new ResponseEntity<>(ex.getMessage,HttpStatus.BAD_REQUEST)
}

, дополнительно создается впечатление, что со временем появилось какое-то количество классов, которые используют примерно столько же времени, сколько используется по умолчанию.

лучше использовать Spring JSON по умолчанию, но, конечно, не хотите влиять на выполняемый в данный момент код. Поэтому мой вопрос заключается в том, чтобы только GenericException возвращало значение по умолчанию Spring JSON?

. Я пытался использовать ResponseStatusException, который действительно возвращал JSON, но по какой-либо причине возвращал только статус INTERNAL_SERVER_ERROR (500) даже при установке значения в аргумент.

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете определить свой собственный ответ об ошибке и вернуть его из метода обработчика исключений. Примерно так:

Модель:

@Builder
public class ErrorResponse {

    private int status;

    private String error;

    private String message;

    private String path;

    private long timestamp;
}

Обработчик:

@ExceptionHandler(GenericException.class)
public ResponseEntity<ErrorResponse> exceptionHandler(GenericException ex){
    ErrorResponse errorResponse = ErrorResponse.builder()
        .message(ex.getMessage())
        .status(HttpStatus.BAD_REQUEST.value())
        .error(HttpStatus.BAD_REQUEST.getReasonPhrase())
        .build();

    return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...