如果json请求中缺少类型信息,如何反序列化为基类型?

时间:2018-05-18 06:03:04

标签: json spring jackson json-deserialization jackson-databind

我们遇到了一个问题,我们有一个非抽象的父类,有2个子类,如下所示。当提供类型信息时,杰克逊的默认反序列化过程工作正常。但是当没有提供信息时,因为请求对象是基类;消毒过程失败了。

@JsonTypeName("Vehicle")
@JsonTypeInfo(  
        use = JsonTypeInfo.Id.NAME,  
        include = JsonTypeInfo.As.PROPERTY,  
        property = "type"
)  
@JsonSubTypes({  
        @Type(value = Car.class),
        @Type(value = Bicycle.class) 
})
class Vehicle{
   int number;
}

@JsonTypeName("Car")
class Car extends Vehicle{
int seatingCapacity;
}

@JsonTypeName("Bicycle")
class Bicycle extends Vehicle{
String handleType;
}

以下请求正常:

{
  "type" : "Car",
   "number": "1244"
   "seatingCapacity": 2
}

但是以下请求失败了:

{
   "number": "2222"
}

我们的期望是,如果缺少类型信息,那么最后一个json请求应该被反序列化为基类,即Vehicle。

你可以帮助我们吗?谢谢!

使用spring-boot-starter-web:1.5.2.RELEASE

1 个答案:

答案 0 :(得分:3)

您应该更新您的JsonTypeInfo

@JsonTypeInfo(  
        use = JsonTypeInfo.Id.NAME,  
        include = JsonTypeInfo.As.PROPERTY,  
        property = "type",
        defaultImpl = Car.class
)  

另外,使用最新版本的Jackson依赖项 希望这是有效的。