Я делаю это все время, и, к счастью, это очень легко.
Самый простой / лучший способ сделать это глобально для всего вашего приложения - это определить класс ExceptionHandler.Этот класс является пружинным компонентом, аннотированным @ControllerAdvice
, и будет перехватывать исключения глобально и преобразовывать их в стандартный формат.
Примерно так:
@ControllerAdvice
public class JsonExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<Object> handleAllOtherErrors(Exception exception) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(MediaType.APPLICATION_JSON)
.body(new ErrorResponse(exception.getMessage()));
}
}
Класс ответа об ошибке просто будетчто-то вроде этого:
public class ErrorResponse {
private String message;
public ErrorResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
PS Вы можете обрабатывать различные исключения по-разному, например, в некоторых случаях вы можете захотеть выдать 400 неверных запросов для конкретного исключения.Все, что вам нужно сделать, это добавить другой метод и изменить исключение в аннотации @ExceptionHandler
.
...
Затем с угловой стороны вам придется проверить код ответа HTTP.и если код ответа не является успешным (например, 400, 500), вы можете прочитать ответ, чтобы увидеть сообщение об ошибке.
Ответ будет выглядеть примерно так:
{
"message": "Your exception message"
}
Какойможно просто прочитать в угловом формате через response.message (при условии JavaScript)