2
respostas

Capturar mais de um tipo de retorno

Prezado,

Caso queira capturar , outro tipo de retorno @ResponseStatus, por exemplo um : HttpStatus.CREATED.

O correto seria criar uma nova classe? Qual a melhor prática neste sentido?

@RestControllerAdvice
public class ErroDeValidacaoHandler {

    @Autowired
    private MessageSource messageSource;

    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public List<ErroDeFormularioDto> handle(MethodArgumentNotValidException exception) {
        List<ErroDeFormularioDto> dto = new ArrayList<>();        

        List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();
        fieldErrors.forEach(e->{
            String mensagem = messageSource.getMessage(e, LocaleContextHolder.getLocale());
            ErroDeFormularioDto erro = new ErroDeFormularioDto(e.getField(), mensagem);
            dto.add(erro);
        });

        return dto;

    }
}
2 respostas

Oi Rogerio,

O Handler é para fazer tratamento de exceptions que foram lançadas nos controllers.

Se você quiser devolver outro status code pode criar uma nova classe, parecida com essa, mas a exception deverá ser outra diferente de MethodArgumentNotValidException.

Bons estudos!

Perfeito Rodrigo, obrigado pelo suporte!