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 就是您所需要的。
您必须定义三个应涵盖所有属性的接口:
- Public - 所有通用属性。
- A - 属于集合 A 的属性。
- 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();
}
所有这些都是我未经测试创建的。仅通过阅读文档,但它应该适合您。我确信类似的解决方案曾经对我有用。
我想排除 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 就是您所需要的。
您必须定义三个应涵盖所有属性的接口:
- Public - 所有通用属性。
- A - 属于集合 A 的属性。
- 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();
}
所有这些都是我未经测试创建的。仅通过阅读文档,但它应该适合您。我确信类似的解决方案曾经对我有用。