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



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

如果A是我所有属性的集合:有一次我需要用B ⊂A.另一次C与C ⊂A.和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}

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

所有这些都是在没有测试的情况下创建的。只能通过阅读文档,但它应该为您工作。我敢肯定,类似的解决方案曾经在我身上奏效过。

相关内容

  • 没有找到相关文章

最新更新