【问题标题】:spring rest dynamically exclude Object properties from serializationspring rest 动态地从序列化中排除对象属性
【发布时间】:2015-08-24 19:42:14
【问题描述】:

我想排除弹簧休息响应体的特定属性。经过数小时的谷歌搜索后,我发现了这个:http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring 由于它的日期,我想问一下杰克逊和或更快的xml是否有更新的东西。 JsonView 不符合我的要求,因为我需要涵盖这种情况:

如果 A 是我所有属性的集合:一次我需要用 B ⊂ A 公开 B。另一次用 C ⊂ A 公开 C。而 B ∩ C != ∅

这会导致复杂的视图声明以及注释每个类,并且在某些情况下可能也不可能。所以我想做的是类似于这样的事情:

@RequestMapping("/test1")
@JsonIgnoreProperties( { "property1"})
public TestObject test1(HttpRequest request){
    return new TestObject();
}

@RequestMapping("/test2")
@JsonIgnoreProperties( { "property2"})
public TestObject test1(HttpRequest request){
    return new TestObject();
}

带输出:

{property2:ipsum,property3:dolor}

{property1:lorem,property3:dolor}

【问题讨论】:

    标签: spring serialization jackson fasterxml spring-restcontroller


    【解决方案1】:

    在我看来,Jackson View 是你所需要的。

    您必须定义三个应涵盖所有属性的接口:

    1. 公共 - 所有公共属性。
    2. A - 属于集合 A 的属性。
    3. B - 属于集合 B 的属性。

    示例接口:

      class Views {
                static class Public { }
                static class A extends Public { }
                static class B extends Public { }
      }
    

    假设您的 POJO 类如下所示:

    class TestObject {
                @JsonView(Views.A.class) String property1;
                @JsonView(Views.B.class) String property2;
                @JsonView(Views.Public.class) String property3;
      }
    

    现在,您的控制器应该包含以下带有注释的方法:

    @RequestMapping("/test1")
    @JsonView(Views.B.class)
    public TestObject test1(HttpRequest request){
        return new TestObject();
    }
    
    @RequestMapping("/test2")
    @JsonView(Views.A.class)
    public TestObject test2(HttpRequest request){
        return new TestObject();
    }
    

    所有这些都是我未经测试而创建的。仅通过阅读文档,但它应该对您有用。我确信类似的解决方案曾经对我有用。

    【讨论】:

    • hm.. 我明白了,所以我必须注释所有内容,即使是相关的对象类也使用正确的 jsonviews 认为仅使用控制器注释可能是可能的
    • 您尝试过给定的解决方案吗?它对你有用吗?
    • 好的,它适用于那些有问题的人检查你是否使用 daterxml 而不是 jackson 用于最新的 spring 版本(jackson 不适合我)
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2012-04-27
    • 2019-07-05
    相关资源
    最近更新 更多