类型信息参数丢失时序列化为子类型

时间:2019-07-16 05:05:53

标签: java json jackson polymorphism jackson2

当在JSON中传递type参数时,我具有多态类型和序列化。

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;


@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", defaultImpl = Dog.class)
@JsonSubTypes({
    @JsonSubTypes.Type(value=Dog.class, name="dog"),
    @JsonSubTypes.Type(value=Cat.class, name="cat")
})    
public class Animal { ... }

public class Dog extends Animal { ... }
public class Cat extends Animal { ... }

  

{“ name”:“ Tom”,type =“ cat”} //有效

@POST
@Produces(MediaType.APPLICATION_JSON)
public Response animal(Animal animal) {...}

但是,如果我直接想要获取子类型对象而不传递类型,则它不起作用。

@POST
@Produces(MediaType.APPLICATION_JSON)
public Response dog(Dog dog) {...}
  

{“ name”:“ Tom”} //无法正常工作

     

尝试解析[简单类型,类.... Dog]的子类型时缺少类型ID:缺少类型ID属性'type'

有什么方法可以实现?

0 个答案:

没有答案