Spring和@JsonView具有多个标识符

Mik*_*iou 11 spring spring-mvc jackson

Spring @JsonView自版本4.1起支持.

@RestController使用@JsonView具有多个标识符的Spring控制器(带注释)方法注释我得到以下异常:

java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@a566e37e
Run Code Online (Sandbox Code Playgroud)

显然,根据JsonViewResponseBodyAdviceJavadoc中符合下列条件:

请注意,尽管@JsonView允许指定多个类,但只有一个类参数才支持使用响应正文建议.考虑使用复合接口.

同样,当@RequestBody使用@JsonView具有多个标识符的控制器的方法参数(带注释)进行注释时; 根据JsonViewRequestBodyAdvice的Javadoc:

请注意,尽管@JsonView允许指定多个类,但只有一个类参数才支持使用请求体建议.考虑使用复合接口.

有人知道是否计划修复?我目前的Spring版本是4.2.4.

这对于为公共,私有(扩展公共),摘要和详细(扩展摘要)视图创建json视图,然后在控制器方法中组合它们非常有用!

Séb*_*uze 10

正如Jackson JsonView文档中所解释的那样,"每个序列化只有一个活动视图;但由于视图的继承,可以通过聚合组合视图".

具体来说,如果要同时使用FooBarJsonViews,请定义一个FooBar将它们组合在一起的接口,如下所示:

interface Foo {}

interface Bar {}

interface FooBar extends Foo, Bar {}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用@JsonView(Foo.class)或注释您的字段,@JsonView(Bar.class)@JsonView(FooBar.class)在控制器级别使用.