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

显然,根据@JsonViewJavadoc以下是正确的:
注意,尽管@jsonview允许多个类
指定时,仅支持使用响应正文通知
只有一个类参数。考虑使用复合接口。
同样,当用具有多个标识符的JsonViewResponseBodyAdvice注释控制器的方法参数(用@RequestBody注释)时,根据@JsonViewJavadoc
注意,尽管@jsonview允许多个类
指定,仅支持使用请求正文通知
只有一个类参数。考虑使用复合接口。
有人知道是否计划了修复吗?我现在的弹簧版本是4.2.4。
这将非常有用,为公共、私有(扩展公共)、摘要和详细(扩展摘要)视图创建JSON视图,然后将它们组合到控制器方法中!

最佳答案

Jackson JsonView documentation中所述,“每个序列化只能有一个活动视图;但由于视图的继承,可以通过聚合组合视图”。
具体来说,如果要同时使用FooBarjsonviews,请定义一个将它们组合在一起的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/

10-11 04:32