Saltar al contenido

Anotación transitoria JPA y JSON

Solución:

Simplemente agregué las anotaciones JsonSerialize y JsonDeserialize.

@Transient
@JsonSerialize
@JsonDeserialize
private String myField;

Al contrario de lo que les estaba diciendo en los comentarios, parece que Jackson se preocupa por las anotaciones JPA cuando se usa para serializar instancias de clases de entidad gracias al módulo Hibernate de Jackson.

Dentro de ese módulo, hay un HibernateAnnotationIntrospector al que la documentación se refiere como un

AnnotationIntrospector simple que agrega soporte para usar Transient para denotar campos ignorables (junto con anotaciones Jackson y / o JAXB).

Y como puede ver aquí, el comportamiento predeterminado de Jackson es verificar cualquier @Transient anotación que puede encontrar.

Entonces, al final, su problema se puede resolver de cualquiera de esas 3 formas:

  1. Configure Jackson (usando el método setUseTransient de HibernateAnnotationIntrospector) para deshabilitar la verificación de @Transient anotaciones (consulte esta respuesta para obtener detalles de implementación).
  2. Utilice otro objeto que PublicationVO como el resultado devuelto de su getPublicationDetailsJSON método. Tendrá que copiar las propiedades de su objeto de valor al objeto que se devuelve en algún momento.
  3. Eliminar el @Transient anotación y persistencia de la propiedad (pero lo entendería si esa no es una opción para usted, ya que probablemente tenga una buena razón para haber hecho que esta propiedad sea JPA-transitoria en primer lugar).

Salud

Solo para agregar más a la respuesta proporcionada por m4rtin

Fui con el primer enfoque: configurar Jackson (usando el método setUseTransient de HibernateAnnotationIntrospector) para deshabilitar la verificación de anotaciones @Transient.

En mi proyecto seguí, tuve que seguir el siguiente hilo para evitar la serialización de jackson en objetos perezosos no recuperados Evitar la serialización de Jackson en objetos perezosos no recuperados

Para configurar mi proyecto para que no ignore las anotaciones transitorias, configuro el Hibernate4Module de la siguiente manera

        Hibernate4Module hm = new Hibernate4Module();
    hm.disable(Feature.USE_TRANSIENT_ANNOTATION);

Gracias por tu ayuda en este m4rtin

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *