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

Como construir um erro customizável lançando a exceção MethodArgumentNotValidException?

Tenho o seguinte código:

public void validate() {
        String regex = getRowRegex();

        for (String row : dna) {
            if(!row.matches(regex)) {
                throw new RuntimeException("Sequência de base nitrogenada inválida: " + row);
            }
        }
    }

Em vez de lançar RuntimeException com MethodArgumentNotValidException, porém com uma mensagem igual a do exemplo acima, como ficaria? Eu também fiz conforme a aula para exemplos mais comuns como atributos nulos e vazios.

Já tenho a classe:

@RestControllerAdvice
public class ErrorValidationHandler {

    @Autowired
    private MessageSource messageSource;

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    public List<ValidationErrorDTO> handle(MethodArgumentNotValidException exception) {
        List<ValidationErrorDTO> validationErrorsDTO = new ArrayList<>();
        List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors();

        fieldErrors.forEach(e -> {
            String message = messageSource.getMessage(e, LocaleContextHolder.getLocale());
            validationErrorsDTO.add(new ValidationErrorDTO(e.getField(), message));
        });

        return validationErrorsDTO;
    }
}
2 respostas
solução!

Oi Igor,

Pelo que eu entendi você está querendo fazer uma validação que é especifica do seu projeto, é isso?

Você também pode utilizar o Bean Validation, mas precisará criar a sua própria anotação com a sua regra de validação.

Tem um exemplo nesse post: https://matheuspcarvalhoblog.wordpress.com/2017/04/01/anotacao-customizada-bean-validation/

Veja se te atende.

Bons estudos!

Entendi, Rodrigo, é exatamente isso mesmo.