2
respostas

VALIDAR DATA COM SPRING

Olá, já vi em outro tópico que não é possível validar se a data está sendo digitada no formato certo com anotações sem receber o erro 400. Existe alguma outra forma de fazer essa validação e devolver uma mensagem de erro ao invés de retornar bad request?

2 respostas

ajuda????

Olá, Leonardo! Tudo certo?

Realmente, utilizando apenas anotações do Spring, não é possível validar se a data está sendo digitada no formato correto sem receber o erro 400. No entanto, é possível realizar essa validação de forma personalizada.

Uma forma de fazer isso é criar uma classe de validação customizada que implemente a interface ConstraintValidator do Spring. Nessa classe, você pode definir a lógica de validação da data de acordo com o formato desejado. Caso a data não esteja no formato correto, você pode lançar uma exceção personalizada com a mensagem de erro desejada.

Aqui está um exemplo de como você pode implementar essa validação customizada:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomDateValidator.class)
public @interface CustomDate {
    String message() default "Data inválida";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
public class CustomDateValidator implements ConstraintValidator<CustomDate, String> {
    private static final String DATE_FORMAT = "dd/MM/yyyy";

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return true; // Permite que o campo seja nulo, se necessário
        }

        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
            dateFormat.setLenient(false);
            dateFormat.parse(value);
            return true;
        } catch (ParseException e) {
            return false;
        }
    }
}

Com essa implementação, você pode utilizar a anotação @CustomDate nos campos que deseja validar. Caso a data não esteja no formato correto, a mensagem "Data inválida" será retornada.

Espero ter ajudado e bons estudos!