Как получить отображение массива подклассов в @RestController - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь реализовать конечную точку для RestController в приложении SpringBoot. Я ожидаю, что я получу POST-запрос с таким телом:

    {
      order: [
        {
         name: "Product1",
         type: "Fresh",
         expiryPeriod: "10"
        },
        {
         name: "Product2",
         type: "Frozen",
         manufacturingDate: "2017-03-08",
         storageTemp: "-40"
        }
      ]
    }

Соответственно у меня есть абстрактный класс Product и 2 подкласса: FreshProduct и FrozenProduct. Вопрос: как я могу получить List<Product> от @ResponseBody?

1 Ответ

0 голосов
/ 16 мая 2019

Установите тип в вашем абстрактном классе следующим образом:

@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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...