如何在@RestController

时间:2019-05-16 15:19:58

标签: java spring spring-boot

我尝试在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>

1 个答案:

答案 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