É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; } }
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>
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!