2015-01-20 49 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