【问题标题】:Spring 4.1's JsonView and Hibernate4ModuleSpring 4.1 的 JsonView 和 Hibernate4Module
【发布时间】:2015-03-06 22:25:30
【问题描述】:

我有一个项目通过 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 视图过滤器大量使用延迟加载。

如果我禁用它,我必须在我的 rest 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 过滤器。

感谢您提供的任何见解。

【问题讨论】:

    标签: spring hibernate spring-mvc jackson


    【解决方案1】:

    每当您使用 spring 4.1.* 时,请确保您正在更改

    import org.codehaus.jackson.annotate.*;
    

    import org.fasterxml.jackson.annotate.*;
    

    在你的情况下

    导入 org.fasterxml.jackson.annotate.JsonView;

    【讨论】:

      【解决方案2】:

      我认为您需要将 DEFAULT_VIEW_INCLUSION 功能配置为 false。默认情况下,所有没有显式视图定义的属性都包含在序列化中。开箱即用的 Spring 将为您禁用此默认设置。因此,如果您想使用自己的自定义映射器,您可能需要禁用它,否则所有没有 @JsonView 注释的属性都将添加到 JSON 中。

      mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
      

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 1970-01-01
        • 2019-02-27
        • 2016-04-04
        • 1970-01-01
        • 2018-04-11
        • 2023-03-09
        • 2011-08-11
        • 1970-01-01
        相关资源
        最近更新 更多