Heim > Java > javaLernprogramm > Wie kann verhindert werden, dass Jackson Lazy-Fetched-Hibernate-Objekte serialisiert?

Wie kann verhindert werden, dass Jackson Lazy-Fetched-Hibernate-Objekte serialisiert?

Susan Sarandon
Freigeben: 2024-11-30 06:54:16
Original
421 Leute haben es durchsucht

How to Prevent Jackson from Serializing Lazy-Fetched Hibernate Objects?

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

  1. Erstellen Sie eine Konfigurationsklasse, die WebMvcConfigurerAdapter erweitert und configureMessageConverters überschreibt:
@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);
    }
}
Nach dem Login kopieren
  1. Registrieren Sie den benutzerdefinierten Konverter im HttpMessageConverters-Liste:
public @ResponseBody User getUser(@PathVariable String username) {
        
    User user = userService.getUser(username);
        
    return user;
        
}
Nach dem Login kopieren

Spring XML-Konfiguration

  1. Erstellen Sie einen personalisierten Mapper, wie im verlinkten Tutorial beschrieben:
<bean class="com.pastelstudios.json.HibernateAwareObjectMapper">
Nach dem Login kopieren
  1. Konfigurieren Sie die MappingJackson2HttpMessageConverter zur Verwendung des personalisierten Mappers:
<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper" ref="hibernateAwareObjectMapper" />
    </bean>
</mvc:message-converters>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage