Maison > Java > javaDidacticiel > Comment empêcher Jackson de sérialiser des objets Hibernate récupérés paresseusement ?

Comment empêcher Jackson de sérialiser des objets Hibernate récupérés paresseusement ?

Susan Sarandon
Libérer: 2024-11-30 06:54:16
original
420 Les gens l'ont consulté

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

Éviter la sérialisation de Jackson sur les objets récupérés paresseusement

Cet article aborde le défi consistant à empêcher Jackson de sérialiser des objets non récupérés et chargés paresseusement, ce qui peut résultat lié à Hibernate exceptions.

Introduction

Dans le scénario fourni, un objet utilisateur avec une liste de coordonnées récupérées paresseusement entraîne une exception « Impossible d'initialiser le proxy - pas de session » lorsque Jackson tente de sérialiser l'objet. En effet, Jackson récupère avec impatience les coordonnées avant la sérialisation, violant le mécanisme de chargement paresseux.

Solution

La solution consiste à intégrer un convertisseur de mappage personnalisé qui intègre le Hibernate4Module. Ce module améliore la prise en charge par Jackson des objets chargés paresseux.

Spring Java Configuration

  1. Créez une classe de configuration qui étend WebMvcConfigurerAdapter et remplace configureMessageConverters :
@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);
    }
}
Copier après la connexion
  1. Enregistrez le convertisseur personnalisé dans la liste HttpMessageConverters :
public @ResponseBody User getUser(@PathVariable String username) {
        
    User user = userService.getUser(username);
        
    return user;
        
}
Copier après la connexion

Configuration XML Spring

  1. Créez un mappeur personnalisé, comme décrit dans le didacticiel lié :
<bean class="com.pastelstudios.json.HibernateAwareObjectMapper">
Copier après la connexion
  1. Configurer le MappingJackson2HttpMessageConverter pour utiliser le mappeur personnalisé :
<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper" ref="hibernateAwareObjectMapper" />
    </bean>
</mvc:message-converters>
Copier après la connexion

En implémentant cette solution, Jackson ne peut pas récupérer avec impatience les objets paresseux non récupérés pendant la sérialisation, résolvant ainsi l'exception et préservant le comportement de chargement paresseux.

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