4.1版之后的弹簧支架
用具有多个标识符的@JsonView
注释弹簧控制器(用@RestController
注释)方法得到以下异常:
java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.springframework.web.method.HandlerMethod$HandlerMethodParameter@a566e37e
显然,根据
@JsonView
的Javadoc以下是正确的:注意,尽管@jsonview允许多个类
指定时,仅支持使用响应正文通知
只有一个类参数。考虑使用复合接口。
同样,当用具有多个标识符的
JsonViewResponseBodyAdvice
注释控制器的方法参数(用@RequestBody
注释)时,根据@JsonView
的Javadoc:注意,尽管@jsonview允许多个类
指定,仅支持使用请求正文通知
只有一个类参数。考虑使用复合接口。
有人知道是否计划了修复吗?我现在的弹簧版本是4.2.4。
这将非常有用,为公共、私有(扩展公共)、摘要和详细(扩展摘要)视图创建JSON视图,然后将它们组合到控制器方法中!
最佳答案
如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)
。关于spring - Spring和@JsonView具有多个标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34535599/