Spring @RequestBody包含不同类型的列表(但是相同的接口)

假设我有一个域类:

public class Zoo{ private List animals; .... 

其中Animal是具有不同实现的接口(Cat,Dog)。 假设我希望能够保存Zoo对象:

  @RequestMapping(value = "/zoo", method = RequestMethod.POST) public @ResponseBody void save(@RequestBody Zoo zoo) { .... 

我想发送一个json – 类似于:

  { animals:[ {type:'Cat', whiskers-length:'3'}, {type:'Dog', name:'Fancy'} ] } 

当键入==’Cat’时,如何告诉spring MVC将动物映射到Cat类型,并在键入==’Dog’时将其映射到Dog类?

您应该使用Jackson注释@JsonTypeInfo@JsonSubTypes来实现多态json。 注释在Animal基类上进行。

 @JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type") @JsonSubTypes({@JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat")}) public abstract class Animal { } 

现在有一个更简单的注释:

 @JsonRootName("dog") public class Dog extends Animal {...} 

可以在fasterxml.github上找到对注释的引用