Решением может быть создание класса и аннотирование его @ControllerAdvice
. Методы этого класса отвечают за обработку определенного c исключения, переданного в качестве параметров. В вашей ошибке 500
должна быть трассировка стека исключений, например "Вызвано .. org.somepackage.SomeException ..." .
1) Вы можете создать собственный класс, содержащий сообщение и код HttpStatus:
public class ExceptionResponse {
private HttpStatus httpStatus;
private String errorMessage;
//getters;setters;
}
2) Класс @ControllerAdvice
с комментариями должен выглядеть следующим образом:
@ControllerAdvice
public class RestExceptionHandler {
@ExceptionHandler(value = SomeException.class)
public ResponseEntity<ExceptionResponse> handleMissingRequiredParameters(SomeException ex) {
ExceptionResponse exceptionResponse = new ExceptionResponse();
exceptionResponse.setHttpStatus(HttpStatus.BAD_REQUEST);
exceptionResponse.setErrorMessage(ex.getMessage());
return new ResponseEntity<>(exceptionResponse, exceptionResponse.getHttpStatus());
}
}
А теперь, когда выдается SomeException
, фактический ответ, который вы увидите, это ExceptionResponse
JSON с пользовательскими httpStatus
и errorMessage
.