Heim >Java >javaLernprogramm >Wie vermeidet man Jackson-Serialisierungsfehler bei Lazy-Loaded-Hibernate-Objekten?
Vermeidung der Jackson-Serialisierung von nicht abgerufenen Lazy-Objekten
Jackson, eine beliebte Java-Bibliothek für die Datenbindung, kann bei der Serialisierung von Objekten mit auf Probleme stoßen Lazy-Fetched-Eigenschaften. In diesem Fall verursacht die nicht abgerufene Eigenschaft, die nicht in die Sitzung geladen wird, während der Serialisierung die Ausnahme „Proxy konnte nicht initialisiert werden – keine Sitzung“.
Lösung:
Um dieses Problem zu beheben, müssen wir Jackson anweisen, verzögert abgerufene Eigenschaften während der Serialisierung zu ignorieren. In älteren Versionen von Spring (3.1 und niedriger) wurde dies erreicht, indem ein benutzerdefinierter HibernateAwareObjectMapper erstellt und zu einem benutzerdefinierten MappingJackson2HttpMessageConverter hinzugefügt wurde.
In Spring-Versionen 3.1.2 und höher stellt Spring jedoch seinen eigenen MappingJackson2HttpMessageConverter bereit beinhaltet die notwendige Funktionalität. Wir können diesen Konverter konfigurieren und ihn zu den HttpMessageConverters der Anwendung hinzufügen.
Implementierung:
Java-Konfiguration:
@Configuration @EnableWebMvc public class MyConfigClass extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); } public MappingJackson2HttpMessageConverter jacksonMessageConverter() { MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate4Module()); messageConverter.setObjectMapper(mapper); return messageConverter; } }
XML Konfiguration:
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.pastelstudios.json.HibernateAwareObjectMapper" /> </property> </bean> </mvc:message-converters>
Durch die Konfiguration des MappingJackson2HttpMessageConverter für die Verwendung von Hibernate4Module wird Jackson angewiesen, verzögert abgerufene Eigenschaften während der Serialisierung zu ignorieren. Dadurch wird das Problem nicht initialisierter Proxys behoben und Ihr Controller kann Benutzerobjekte zurückgeben, ohne dass Serialisierungsfehler auftreten.
Das obige ist der detaillierte Inhalt vonWie vermeidet man Jackson-Serialisierungsfehler bei Lazy-Loaded-Hibernate-Objekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!