2

我想排除弹簧休息响应体的特定属性。经过数小时的谷歌搜索后,我发现了这个:http : //www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring 由于它的日期,我想问一下jackson和或fastxml是否有更新的东西。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}
4

1 回答 1

2

在我看来, 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();
}

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

于 2015-08-24T20:51:47.250 回答