0

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.

1 Answer 1

1

It's probably because you forgot to annotate the methods with @ExceptionHandler

 @Override @ExceptionHandler(value = { (HttpMessageNotReadableException .class}) 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 Error(mensagemUsuario, mensagemDesenvolvedor)); return handleExceptionInternal(ex, erros, headers, HttpStatus.BAD_REQUEST, request); } 
Sign up to request clarification or add additional context in comments.

1 Comment

Not sure if that's it because now I'm getting a error org.springframework.beans.factory.BeanCreationException that says the nested exception is java.lang.IllegalStateException on the above method

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.