Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

retorno da validação vem uma lista vazia

o retorno da validação vem uma lista vazia em vez do "campo" e "erro". fiz um teste e o controller chama o handle quando da 404, mas não consegui fazer com que trouxesse os campos.

meus códigos:

@RestControllerAdvice
public class ErrodeValidacaoHandler {

    @Autowired
    private MessageSource messageSource;


    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(BindException.class)
    public List<ErroDeFormularioDTO> handle(BindException 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);
        });

        return dto;
    }

}

public class ErroDeFormularioDTO {

    private String campo;
    private String erro;

    public ErroDeFormularioDTO(String campo, String erro) {
        this.campo = campo;
        this.erro = erro;
    }

    public String getCampo() {
        return campo;
    }

    public String getErro() {
        return erro;
    }
}
2 respostas
solução!

Oi Fernanda,

No seu foreach faltou adicionar o erro na lista:

fieldErrors.forEach(e -> {
    String mensagem = messageSource.getMessage(e, LocaleContextHolder.getLocale());
    ErroDeFormularioDTO erro = new ErroDeFormularioDTO(e.getField(), mensagem);

    //faltou:
    dto.add(erro);
});

Bons estudos!

obrigada Rodrigo!