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视图,然后在控制器方法中组合它们非常有用!
答案 0 :(得分:8)
如Jackson JsonView documentation中所述,“每个序列化只有一个活动视图;但由于视图的继承,可以通过聚合组合视图”。
具体而言,如果要同时使用Foo
和Bar
JsonViews,请定义一个FooBar
接口,将它们组合如下:
interface Foo {}
interface Bar {}
interface FooBar extends Foo, Bar {}
然后,您可以使用@JsonView(Foo.class)
或@JsonView(Bar.class)
为您的字段添加注释,并在控制器级别使用@JsonView(FooBar.class)
。