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!