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

Não simplifica meu Json

Quando eu lanço o post com o campo vazio, ainda retorna aquele json gigante

ErroDeValidacaoHandler.java

package br.com.alura.forum.config.validacao;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ErroDeValidacaoHandler {

    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;
    }

}
4 respostas

ErroDeFormularioDto

package br.com.alura.forum.config.validacao;

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;
    }




}

E agora está dando status 400 até quando preencho os campos ):

Oi Priscila,

Parece que na nova versão do Spring Boot houve uma alteração e agora seu método deve ficar assim:

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
@ExceptionHandler(BindException.class)
public List<ErroDeFormularioDto> handle(BindException ex) {

Veja se desse jeito resolve.

solução!

Rodrigo, na verdade, eu estava apenas esquecendo de colocar o @Autowired na classe ErroDeValidacaoHandler.

@Autowired
    private MessageSource messageSource;

Mas, bom saber desse detalhe tbem. Obrigada