I can't seem to be able to make the following code work, for some reason neither of the following advice is being thrown to the controller, like it doesn't exist.
@ControllerAdvice public class ExceptionHandler extends ResponseEntityExceptionHandler { @Autowired private MessageSource messageSource; @Override protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { String mensagemUsuario = messageSource.getMessage("mensagem.invalida", null, LocaleContextHolder.getLocale()); String mensagemDesenvolvedor = ex.getCause().toString(); List<Erro> erros = Arrays.asList(new Erro(mensagemUsuario, mensagemDesenvolvedor)); return handleExceptionInternal(ex, erros, headers, HttpStatus.BAD_REQUEST, request); } @Override protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { List<Erro> erros = criarListaDeErros(ex.getBindingResult()); return handleExceptionInternal(ex, erros, headers, HttpStatus.BAD_REQUEST, request); } private List<Erro> criarListaDeErros(BindingResult bindingResult) { List<Erro> erros = new ArrayList<>(); for (FieldError fieldError : bindingResult.getFieldErrors()) { String mensagemUsuario = messageSource.getMessage(fieldError, LocaleContextHolder.getLocale()); String mensagemDesenvolvedor = fieldError.toString(); erros.add(new Erro(mensagemUsuario, mensagemDesenvolvedor)); } return erros; } @org.springframework.web.bind.annotation.ExceptionHandler({EmptyResultDataAccessException.class}) @ResponseStatus(HttpStatus.NOT_FOUND) public ResponseEntity<Object> handleEmptyResultDataAccessException(RuntimeException ex, WebRequest request){ String mensagemUsuario = messageSource.getMessage("mensagem.invalida", null, LocaleContextHolder.getLocale()); String mensagemDesenvolvedor = ex.getCause().toString(); List<Erro> erros = Arrays.asList(new Erro(mensagemUsuario, mensagemDesenvolvedor)); return handleExceptionInternal(ex, erros, new HttpHeaders(), HttpStatus.NOT_FOUND, request); } @org.springframework.web.bind.annotation.ExceptionHandler({DataIntegrityViolationException.class}) public ResponseEntity<Object> handleDataIntegrityViolationException(DataIntegrityViolationException ex, WebRequest webRequest) { String mensagemUsuario = messageSource.getMessage("mensagem.invalida", null, LocaleContextHolder.getLocale()); String mensagemDesenvolvedor = ex.getCause().toString(); List<Erro> erros = Arrays.asList(new Erro(mensagemUsuario, mensagemDesenvolvedor)); return handleExceptionInternal(ex, erros, new HttpHeaders(), HttpStatus.BAD_REQUEST, webRequest); } public static class Erro { private String mensagemUsuario; private String mensagemDesenvolvedor; public Erro(String mensagemUsuario, String mensagemDesenvolvedor) { this.mensagemUsuario = mensagemUsuario; this.mensagemDesenvolvedor = mensagemDesenvolvedor; } } } It's my first time creating controller advice this way so would very much appreciate if someone could point me what I'm doing wrong.
Thank you.