我想排除弹簧休息响应体的特定属性。经过几个小时的谷歌搜索,我发现了这个: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就是你需要的。
你必须定义三个接口,它们应该涵盖所有的属性:
- Public -所有公共属性。
- A -属于集合A的属性。
- 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();
}
所有这些都是在没有测试的情况下创建的。只能通过阅读文档,但它应该为您工作。我敢肯定,类似的解决方案曾经在我身上奏效过。