我尝试在SpringBoot应用程序中为RestController实现端点。我希望我会收到带有以下内容的POST请求:
{
order: [
{
name: "Product1",
type: "Fresh",
expiryPeriod: "10"
},
{
name: "Product2",
type: "Frozen",
manufacturingDate: "2017-03-08",
storageTemp: "-40"
}
]
}
因此,我有抽象类Product和2个子类:FreshProduct和FrozenProduct。
问题是:如何通过@ResponseBody获得List<Product>
?
答案 0 :(得分:0)
像这样在您的抽象类中设置类型:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = FreshProduct.class, name = "fresh"),
@JsonSubTypes.Type(value = FrozenProduct.class, name = "frozen")}
)
@Data
static abstract class AbstractProduct {
String name;
String type;
}
并在子类中设置类型名称,如下所示:
@JsonTypeName("fresh")
static class FreshProduct extends AbstractProduct {
}
@JsonTypeName("frozen")
static class FrozenProduct extends AbstractProduct {
}
有关杰克逊注释的更多信息:https://www.baeldung.com/jackson-annotations