具有多个标识符的Spring和@JsonView

时间:2015-12-30 19:05:44

标签: spring spring-mvc jackson

Spring从版本4.1开始支持@JsonView

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

java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@a566e37e

显然根据JsonViewResponseBodyAdvice的{​​{3}},以下情况属实:

  

请注意,尽管@JsonView允许多个类   指定时,仅支持使用响应正文建议   恰好是一个类参数。考虑使用复合接口。

同样,当使用具有多个标识符的@RequestBody注释控制器的方法参数(使用@JsonView注释)时;根据{{​​1}}的{​​{3}}:

  

请注意,尽管@JsonView允许多个类   指定时,仅支持使用请求正文建议   恰好是一个类参数。考虑使用复合接口。

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

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

1 个答案:

答案 0 :(得分:8)

Jackson JsonView documentation中所述,“每个序列化只有一个活动视图;但由于视图的继承,可以通过聚合组合视图”。

具体而言,如果要同时使用FooBar JsonViews,请定义一个FooBar接口,将它们组合如下:

interface Foo {}

interface Bar {}

interface FooBar extends Foo, Bar {}

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