2015-01-20 48 views
1

夥計們,Spring MVC的@RequestBody成一個接口,而不是一類

此代碼剪斷作品:

@RequestMapping(method = RequestMethod.GET, produces = "application/json") 
public ResponseEntity<List<Member>> findByMemberKeyOrUniqueMemberId(

注意,「會員」是一個接口,而不是一類。

這不起作用。

@RequestMapping(method = RequestMethod.POST) 
public ResponseEntity<String> save(@RequestBody final List<Member> members) { 

因此,我可以將成員轉換爲JSON,但我無法接收成員的JSON。如果我將List的參數從List更改爲成員類的List之一,那麼它可以正常工作,但它確實會弄亂我的代碼。

我該如何解決這個問題?

+2

定義_does not work_。 – 2015-01-20 22:55:13

+0

如果我試圖反序列化成員,我會得到一個400錯誤請求。如果我使用Member類,我會得到一個200 OK並且一切正常。 – techgnosis 2015-01-20 23:04:49

回答

2

Jackson不能(不可行)猜測使用哪個Member實現來反序列化JSON。

Jackson提供@JsonTypeInfo作爲描述您的繼承層次結構的方法,並提供有關如何反序列化JSON的提示。但是,這需要您修改您的JSON並添加這些提示。這在文檔here中有解釋。

+0

只是所以我明白了,它*可以確定使用哪個實現來序列化爲JSON,但它無法確定使用哪個實現來反序列化JSON。正確? – techgnosis 2015-01-20 23:02:16

+0

@techgnosis對。對於序列化,它需要做的就是調用'getClass()'併爲該類型構建一個序列化器。但是,反序列化時(當前)沒有這種類型的信息。 – 2015-01-20 23:03:21