En pocas palabras, una de mis entidades tiene un GeometryCollection que lanza una excepción cuando llamas a "getBoundary" (el por qué de este es otro libro, por ahora digamos que así funciona).
¿Hay alguna manera de decirle a Jackson que no incluya a ese captador específico? Sé que puedo usar @JacksonIgnore cuando poseo / controlo el código. Pero este no es el caso, jackson termina llegando a este punto mediante la serialización continua de los objetos padres. Vi una opción de filtrado en la documentación de Jackson. ¿Es esa una solución plausible?
¡Gracias!
objectMapper.addMixInAnnotations(Class<?> target, Class<?> mixinSource);
Otra posibilidad es que, si desea ignorar todas las propiedades desconocidas, puede configurar el asignador de la siguiente manera:
fuente
mapper.configure(DeserializationFeature.failOnUnknownPropertiesExcep(new String[] {"myField"}));
without()
como en:mapper.reader().without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
Usando la clase Java
Usar anotación
fuente
El enfoque basado en anotaciones es mejor. Pero a veces se necesita una operación manual. Para ello, puede utilizar sin método de ObjectWriter .
fuente
Las anotaciones mixtas funcionan bastante bien aquí, como ya se mencionó. Otra posibilidad más allá de @JsonIgnore por propiedad es usar @JsonIgnoreType si tiene un tipo que nunca debe incluirse (es decir, si deben ignorarse todas las instancias de las propiedades de GeometryCollection). Luego puede agregarlo directamente (si controla el tipo), o usando una mezcla, como:
Esto puede ser más conveniente si tiene muchas clases que tienen un solo acceso 'IgnoredType getContext ()' o algo así (que es el caso de muchos marcos)
fuente
Tuve un problema similar, pero estaba relacionado con las relaciones bidireccionales de Hibernate. Quería mostrar un lado de la relación e ignorar programáticamente el otro, dependiendo de la vista con la que estuviera tratando. Si no puede hacer eso, terminará con desagradables
StackOverflowException
s. Por ejemplo, si tuviera estos objetosMe gustaría ignorar programáticamente el
parent
campo en B si estuviera mirando A, e ignorar elchildren
campo en A si estuviera mirando B.Empecé a usar mixins para hacer esto, pero muy rápidamente se vuelve horrible; tienes tantas clases inútiles por ahí que existen únicamente para formatear datos. Terminé escribiendo mi propio serializador para manejar esto de una manera más limpia: https://github.com/monitorjbl/json-view .
Le permite especificar mediante programación qué campos ignorar:
También le permite especificar fácilmente vistas muy simplificadas a través de comparadores de comodines:
En mi caso original, la necesidad de vistas simples como esta era mostrar lo mínimo sobre el padre / hijo, pero también se volvió útil para nuestra seguridad basada en roles. Se necesitaban vistas menos privilegiadas de los objetos para devolver menos información sobre el objeto.
Todo esto proviene del serializador, pero estaba usando Spring MVC en mi aplicación. Para que maneje correctamente estos casos, escribí una integración que puede incluir en las clases de controladores Spring existentes:
Ambos están disponibles en Maven Central. Espero que ayude a alguien más, este es un problema particularmente feo con Jackson que no tuvo una buena solución para mi caso.
fuente
Match.match()
?Si desea excluir SIEMPRE ciertas propiedades para cualquier clase, puede usar el
setMixInResolver
método:fuente
Un buen punto más aquí es usar
@JsonFilter
. Algunos detalles aquí http://wiki.fasterxml.com/JacksonFeatureJsonFilterfuente