我有一个项目,它通过org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter视图过滤器自由地使用延迟加载。
如果我禁用它,我必须在我的其余servlet配置中添加一个新的消息转换器:
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) {
// Add the custom-configured HttpMessageConverter
converters.add(jacksonMessageConverter());
super.configureMessageConverters(converters);
}
然而,这样做似乎打破了@JsonView的行为:@JsonView注释的存在似乎不再过滤掉任何属性。
我的猜测是Hibernate4Module不支持@JsonView,但如果是这样的话,我怎样才能使用Spring 4.1的@JsonView支持并让Jackson认识到延迟加载的Hibernate实体?到目前为止唯一的解决方案似乎是避免使用Hibernate4Module并依赖OpenEntityManagerInViewFilter过滤器。
感谢您提供的任何见解。
答案 0 :(得分:0)
每当使用spring 4.1。*时,请确保您正在更改
import org.codehaus.jackson.annotate.*;
到
import org.fasterxml.jackson.annotate.*;
在你的情况下
import org.fasterxml.jackson.annotate.JsonView;
答案 1 :(得分:0)
我认为您需要将DEFAULT_VIEW_INCLUSION功能配置为false。默认情况下,所有没有显式视图定义的属性都包含在序列化中。开箱即用Spring将为您禁用此默认值。因此,如果您想使用自己的自定义映射器,您可能希望禁用它,或者所有带有@JsonView注释的属性都将添加到您的JSON中。
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);