spring rest 从序列化中动态排除对象属性

spring rest dynamically exclude Object properties from serialization

我想排除 spring 其余响应正文的特定属性。经过几个小时的谷歌搜索后,我发现了这个:http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring 由于它的日期,我想问一下是否有关于 jackson 和/或 fasterxml 的最新信息。 JsonView 不符合我的要求,因为我需要涵盖这种情况:

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

这会导致复杂的视图声明以及对每个 class 进行注释,并且在某些情况下可能无法实现。所以我想做的是类似这样的事情:

@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}

在我看来 Jackson View 就是您所需要的。

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

  1. Public - 所有通用属性。
  2. A - 属于集合 A 的属性。
  3. B - 属于集合 B 的属性。

示例接口:

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

假设您的 POJO class 看起来像这样:

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();
}

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