É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
@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; }
Configuration XML Spring
<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>
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!