@RequestBody recibe parámetros Json | Utilice anotaciones personalizadas en objetos Vo para la validación del formato de fecha y tipo
¿El título es demasiado largo? Principalmente describir el problema de forma clara para no acabar en el artículo equivocado.
Ayer, cuando mis colegas de prueba estaban probando la interfaz, encontraron un problema de verificación del tipo de fecha.
El formato de fecha requerido es: aaaa-MM-dd HH: mm: ss, Vo hizo los siguientes comentarios al usarlo:
Los colegas de prueba ingresan los dos parámetros siguientes y los guardan Con éxito, cuando la entrada es el parámetro "202105", los datos guardados pasan a ser "1970-01-01 08:03:22", descubriendo así este problema.
Las tres anotaciones de formato de fecha comúnmente utilizadas se explican a continuación:
Dado que la anotación @RequestBody primero convertirá la cadena json en el objeto Vo correspondiente, en los campos del objeto Vo Las anotaciones agregadas tendrán efecto nuevamente y @DateTimeFormat solo realiza el formateo, mientras que @DateTimeFormat no puede completar el formateo. fuerte>Solo formateo, no verificación de formato.
Utilice anotaciones personalizadas para realizar comprobaciones de formato en fechas en cadenas json.
Solución:
1. Obtenga la entrada de cadena json original del objeto de solicitud. Debido a que el valor del parámetro obtenido por la implementación ConstraintValidator de la interfaz de anotación personalizada es el objeto Date después de que la anotación @RequestBody analiza el parámetro de cadena json en un objeto Vo, en lugar del valor de cadena json original, el valor del parámetro json original debe obtenerse de la solicitud; p>
2. Obtenga el valor original del parámetro de entrada json y use expresiones regulares para verificar el formato de la fecha.
Recordatorio:
1. Dado que las anotaciones personalizadas no pueden obtener directamente el objeto de solicitud, debe obtener el objeto de solicitud de acuerdo con el marco correspondiente.
2. La entrada de la cadena json original puede contener espacios, retornos de carro, avances de línea, tabulaciones y otros caracteres especiales, por lo que es necesario utilizar caracteres especiales para el procesamiento.
3. Obtenga el nombre del atributo anotado en el objeto Vo.
Para obtener más información, consulte: getFieldName(ConstraintValidatorContext context), es decir: ((ConstraintValidatorContextImpl) context).basePath.currentLeafNode.
SearchTaskVo.java
DateFormatValidation. java
DateFormatValidator.java
DateFormatValidator.java
DateFormatValidator.java
DateFormatValidator.javajava
Hasta ahora El problema se ha resuelto ~
Si tiene algún problema oculto en el artículo, deje un mensaje ~
Si tiene alguna buena pregunta, contáctenos. p>
Si tiene una buena solución, deje un mensaje ~