Jackson-Serialisierung bei verzögert abgerufenen Objekten vermeiden
Dieser Artikel befasst sich mit der Herausforderung, Jackson daran zu hindern, nicht abgerufene, verzögert geladene Objekte zu serialisieren, was möglich ist Dies führt zu einem Hibernate-bezogenen Problem Ausnahmen.
Einführung
Im bereitgestellten Szenario führt ein Benutzerobjekt mit einer verzögert abgerufenen Koordinatenliste zu einer Ausnahme „Proxy konnte nicht initialisiert werden – keine Sitzung“. Jackson versucht, das Objekt zu serialisieren. Dies liegt daran, dass Jackson die Koordinaten vor der Serialisierung eifrig abruft und damit den Lazy-Loading-Mechanismus verletzt.
Lösung
Die Lösung beinhaltet die Integration eines benutzerdefinierten Zuordnungskonverters, der das Hibernate4Module integriert. Dieses Modul verbessert Jacksons Unterstützung für verzögert geladene Objekte.
Spring Java Configuration
@Configuration @EnableWebMvc public class MyConfigClass extends WebMvcConfigurerAdapter{ public MappingJackson2HttpMessageConverter jacksonMessageConverter(){ MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate4Module()); messageConverter.setObjectMapper(mapper); return messageConverter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); } }
public @ResponseBody User getUser(@PathVariable String username) { User user = userService.getUser(username); return user; }
Spring XML-Konfiguration
<bean class="com.pastelstudios.json.HibernateAwareObjectMapper">
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="hibernateAwareObjectMapper" /> </bean> </mvc:message-converters>
Durch die Implementierung dieser Lösung wird Jackson daran gehindert, nicht abgerufene Lazy-Objekte während der Serialisierung eifrig abzurufen, wodurch die Ausnahme behoben und das Lazy-Loading-Verhalten beibehalten wird.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Jackson Lazy-Fetched-Hibernate-Objekte serialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!