Spring 4.1&#39的JsonView和Hibernate4Module

时间:2015-03-06 22:25:30

标签: spring hibernate spring-mvc jackson

我有一个项目,它通过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过滤器。

感谢您提供的任何见解。

2 个答案:

答案 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);