serialize convert java json jackson pojo jackson2

convert - object to json java objectmapper



Filtro personalizado Jackson con enlace de datos POJO completo (3)

Esta pregunta extiende esta pregunta .

Si bien la solución anterior funciona muy bien si solo tiene un par de campos, se vuelve inmanejable cuando tiene más de una docena de campos. En este momento, mi configuración actual utiliza el enlace de datos completo, por lo que tengo un POJO que Jackson utilizará para deserializar automáticamente a JSON.

Sin embargo, como antes, ciertos campos tienen restricciones que deben pasar. Básicamente, estoy buscando una respuesta similar a esta , pero sin la necesidad de establecer ninguna propiedad. Solo un deserializador personalizado que actuará como filtro y lanzará una excepción personalizada si un campo no cumple con la restricción. Si no se ha lanzado ninguna excepción al final del filtro, Jackson debería vincular automáticamente JSON a POJO.


Parece que Json Schema podría satisfacer tus necesidades. Permite reglas de validación flexibles (y complejas) de cadenas json antes de que se deserialicen. Incluye campos obligatorios, verificación de valor basada en expresiones regulares, formatos estándar de la industria (por ejemplo, puede definir un campo como formato de "correo electrónico"), dependencias entre campos (en la última versión de v4), etc.

Lo anterior es un estándar independiente del lenguaje. En cuanto a la implementación de Java, utilicé esta que es compatible con la última versión del esquema json (el estándar aún está evolucionando). La integración inicial del validador fue mucho trabajo (debido a mi modelo json muy dinámico) pero después de eso es muy conveniente introducir nuevas reglas de validación (solo es necesario cambiar el archivo de esquema de json)


solo para tener en cuenta: si no te importa la validación durante la deserialización, prueba la @JsonIgnoreProperties(ignoreUnknown = true) para tu clase POJO. Puede hacer la validación más adelante, donde la lógica comercial real funciona con las clases pojo.


Recomendaría separar las preocupaciones de deserialización y validación mediante el uso de Jackson y Hibernate Vaildator correspondientemente. La idea es primero deserializar los datos json en POJO, y luego validar el POJO de acuerdo con el requisito. En su caso, puede aplicar restricciones de nivel de Clase para la validación. Las restricciones de nivel de clase tienen mucha flexibilidad y pueden validar múltiples propiedades correlacionadas al acceder a la instancia del objeto. Es simple pero poderoso.

Por lo general, la validación necesita más preocupaciones de alto nivel. Es mejor manejar esto después de la desrialización. Hacer esto puede hacer que el código sea más fácil de administrar y reutilizar el POJO y las reglas de validación.