2015-12-30 63 views
9

自4.1版以來,Spring支持@JsonViewSpring和@JsonView具有多個標識符

詮釋一個Spring位指示的(與@RestController註釋)方法@JsonView有多個標識符,我得到了以下異常:顯然根據JsonViewResponseBodyAdviceJavadoc以下各項爲真

java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.[email protected]a566e37e 

請注意,儘管@JsonView允許指定多個類別爲 ,但只有支持響應正文建議的使用10正好有一個類參數。考慮使用複合接口。

同樣標註的控制器的方法參數(與@RequestBody註釋)也當與@JsonView具有多個標識符;根據JsonViewRequestBodyAdviceJavadoc

注意的是,儘管@JsonView允許多個類是 規定,對請求主體意見的使用只限於與 只有一個類參數的支持。考慮使用複合接口。

有誰知道是否計劃修復?我目前的春天版本是4.2.4。

這將是非常有用的創建JSON視圖公共,私人(擴展公共),總結和詳細(擴展總結)的意見,然後將它們在控制器方法結合!

回答

2

Jackson JsonView documentation所述,「每個序列化只有單個活動視圖;但由於視圖的繼承,可以通過聚合組合視圖」。

具體而言,如果你想同時使用FooBar JsonViews,定義一個FooBar接口,將它們組合爲:

interface Foo {} 

interface Bar {} 

interface FooBar extends Foo, Bar {} 

然後,您可以用@JsonView(Foo.class)@JsonView(Bar.class)註釋你的領域,並在控制器級別使用@JsonView(FooBar.class)

+0

謝謝Sebastien您的意見,但問題是你我們可以使用繼承(而不是聚合)。 –

+0

不確定要理解,請給我更多有關您的使用案例的詳細信息? –

相關問題