Maison > Java > javaDidacticiel > Comment éviter les erreurs de sérialisation de Jackson avec des objets Hibernate à chargement paresseux ?

Comment éviter les erreurs de sérialisation de Jackson avec des objets Hibernate à chargement paresseux ?

Susan Sarandon
Libérer: 2024-12-02 00:20:08
original
836 Les gens l'ont consulté

How to Avoid Jackson Serialization Errors with Lazy-Loaded Hibernate Objects?

Éviter la sérialisation Jackson des objets paresseux non récupérés

Jackson, une bibliothèque Java populaire pour la liaison de données, peut rencontrer des problèmes lors de la sérialisation d'objets avec propriétés récupérées paresseusement. Dans ce cas, la propriété non récupérée, qui n'est pas chargée dans la session, provoque une exception "Impossible d'initialiser le proxy - pas de session" lors de la sérialisation.

Solution :

Pour résoudre ce problème, nous devons informer Jackson d'ignorer les propriétés récupérées paresseusement pendant la sérialisation. Dans les anciennes versions de Spring (3.1 et inférieures), cela était réalisé en créant un HibernateAwareObjectMapper personnalisé et en l'ajoutant à un MappingJackson2HttpMessageConverter personnalisé.

Cependant, dans les versions Spring 3.1.2 et supérieures, Spring fournit son propre MappingJackson2HttpMessageConverter qui inclut les fonctionnalités nécessaires. Nous pouvons configurer ce convertisseur et l'ajouter aux HttpMessageConverters de l'application.

Implémentation :

Configuration Java :

@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;
    }

}
Copier après la connexion

XML Configuration :

<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>
Copier après la connexion

En configurant MappingJackson2HttpMessageConverter pour utiliser Hibernate4Module, Jackson sera invité à ignorer les propriétés récupérées paresseusement pendant la sérialisation. Cela résout le problème des proxys non initialisés et permet à votre contrôleur de renvoyer des objets utilisateur sans rencontrer d'erreurs de sérialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal