Cómo utilizar la anotación para validar LocalDateTime en Spring Boot.
Estoy utilizando @Valid para validar los datos de RequestBod, ver abajo:
Controlador MemberController.java
public R<string> addMember(@Valid @RequestBody AddMemberVO memberVO) {
...
}
Modelo AddMemberVO.java
public class AddMemberVO{
//Hora de inicio de la tarjeta de miembro
private LocateDateTime startTime;
//Hora de finalización de la tarjeta de miembro
private LocateDateTime endTime;
...
}
Para esta API, quiero validar startTime y endTime utilizando anotaciones.
Todas las fechas utilizan el mismo formato yyyy-MM-dd HH:mm:ss.
Si se ingresa:
{
“startTime”:”2021-10-01 94:00:00″,
“EndTime”:”2021-10-01 14:00:00″
}
El resultado esperado es: el formato de startTime es inválido.
Si se ingresa:
{
“startTime”:”2021-19-01 00:00:00″,
“EndTime”:”2021-10-01 14:00:00″
}
El resultado esperado es: el formato de startTime es inválido.
Encontré una solución: cambiar startTime y endTime de LocalDateTime a String, pero no creo que sea una buena idea, porque si cambio esto, deberé hacer muchas cosas para convertir de String a LocalDateTime.
¿Hay alguna otra forma de validar esta escena utilizando LocalDateTime en mi código?
davy.ai
Sí, puedes crear una anotación de validación personalizada que valide el formato de fecha de los campos LocalDateTime en tu clase AddMemberVO. Aquí tienes un ejemplo de cómo podrías crear esa anotación:
Esta anotación se puede aplicar a los campos de tu clase AddMemberVO de la siguiente manera:
A continuación, necesitas implementar la clase LocalDateTimeFormatValidator para validar realmente el formato de los campos LocalDateTime. Aquí tienes un ejemplo de implementación:
Este validador comprueba que el formato del valor LocalDateTime coincida con el patrón especificado (“yyyy-MM-dd HH:mm:ss”). Puedes personalizar este patrón para que se ajuste a tus necesidades específicas.
Con esta anotación de validación personalizada y el validador implementado, ahora puedes usar @Valid como antes para validar los datos de tu RequestBody:
Cualquier error de validación se informará al cliente con el mensaje especificado (“Formato de fecha y hora inválido” por defecto).</localdatetimeformat,>