[英]Spring @RequestBody containing a list of different types (but same interface)
假设我有一个域类:
public class Zoo{
private List<Animal> 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上找到对注释的引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.