我终于找到了解决方案!感谢indybee给了我一个线索。
教程Spring 3.1,Hibernate 4和Jackson-Module-Hibernate为Spring 3.1及更早版本提供了很好的解决方案。但是由于版本3.1.2 Spring拥有自己的PingJackson2HttpMessageConverter,其功能与本教程中的功能几乎相同,因此我们不需要创建自定义HTTPMessageConverter。
使用javaconfig,我们也不需要创建HibernateAwareObjectMapper,我们只需要将Hibernate4Module添加到Spring已经拥有的默认PingJackson2HttpMessageConverter中,并将其添加到应用程序的HttpMessageConverters中,因此我们需要:
从 WebMvcConfigurerAdapter 扩展我们的 spring config 类,并覆盖 configureMessageConverters 的方法。
在该方法上,添加MapingJackson2HttpMessageConverter,其中Hibernate4Module在previus方法中注册。
我们的配置类应如下所示:
@Configuration
@EnableWebMvc
public class MyConfigClass extends WebMvcConfigurerAdapter{
//More configuration....
/* Here we register the Hibernate4Module into an ObjectMapper, then set this custom-configured ObjectMapper
* to the MessageConverter and return it to be added to the HttpMessageConverters of our application*/
public MappingJackson2HttpMessageConverter jacksonMessageConverter(){
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
//Registering Hibernate4Module to support lazy objects
mapper.registerModule(new Hibernate4Module());
messageConverter.setObjectMapper(mapper);
return messageConverter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//Here we add our custom-configured HttpMessageConverter
converters.add(jacksonMessageConverter());
super.configureMessageConverters(converters);
}
//More configuration....
}
如果你有一个xml配置,你也不需要创建自己的MapingJackson2HttpMessageConverter,但你确实需要创建教程中显示的个性化映射器(HibernateAwareObjectMapper),所以你的xml配置应该看起来像这样:
<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>
希望这个答案是可以理解的,并帮助某人找到这个问题的解决方案,任何问题请随时提出!