我们遇到了一个问题,我们有一个非抽象的父类,有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
答案 0 :(得分:3)
您应该更新您的JsonTypeInfo
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type",
defaultImpl = Car.class
)
另外,使用最新版本的Jackson依赖项 希望这是有效的。