Jackson est en train de lancer une étrange exception que je ne sais pas comment le résoudre. Je suis en utilisant Spring, Hibernate et Jackson.
J'ai déjà considéré que le lazy-loading est à l'origine du problème, mais j'ai pris des mesures pour raconter Jackson ne PAS traiter diverses propriétés comme suit:
@JsonIgnoreProperties({ "sentMessages", "receivedMessages", "educationFacility" })
public class Director extends UserAccount implements EducationFacilityUser {
....
}
J'ai fait la même chose pour tous les autres Compteutilisateur sous-classes.
Voici l'exception levée:
org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[46]->jobprep.domain.educationfacility.Director_$$_javassist_2["handler"])
at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:236)
at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:189)
at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:925)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:153)
Des Suggestions sur comment je peux obtenir plus d'info pour voir ce qui cause cela? Quelqu'un sait comment résoudre ce problème?
EDIT: j'ai découvert que getHander() et autres*() méthodes existent sur l'objet proxy. GRR!! Est-il possible que je peux dire Jackson ne pas traiter quoi que ce soit sur le proxy, ou suis-je le sol? C'est vraiment bizarre, parce que la méthode que crache le JSON plante seulement dans certaines circonstances, ne pas tout le temps. Néanmoins, c'est en raison de l'obtenir*() sur l'objet proxy.
De côté: les Procurations sont le mal. Ils perturbent Jackson, equals() et de nombreuses autres parties de l'ordinaire de programmation Java. Je suis tenté de le fossé Hibernate tout à fait :/