Используя аннотации Java, могу ли я использовать аннотацию oneOf для переопределения абстрактного поля, чтобы переопредеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Используя аннотации Java, могу ли я использовать аннотацию oneOf для переопределения абстрактного поля, чтобы переопреде

Сообщение Anonymous »

Я использую пользовательский интерфейс Swagger для создания документации для моего Spring Boot API. Результат почти такой, как я хочу, но аннотация "oneOf" вызывает небольшую проблему.
Прежде всего, я добавил Springdoc-openapi-starter-webmvc-ui< /code> как зависимость в моем файле pom.xml:

Код: Выделить всё

org.springdoc
springdoc-openapi-starter-webmvc-ui
2.3.0

Некоторые из моих определений схемы для пользовательского интерфейса Swagger расширены из абстрактных классов. Вот здесь у меня и возникла проблема.
API предназначен для возврата списка результатов поиска, упакованного в объект нумерации страниц. Результаты поиска абстрактно определяются следующим образом (для удобства чтения я опустил описания полей схемы):

Код: Выделить всё

@Data
public abstract class SearchItemData {
private String externalId;
private String type;
private String name;
private String description;
@JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "Europe/Copenhagen")
private Date published;
private String address;
private String phase;
private Long estimatedSum;
private Long buildingArea;
private String projectStart;
private String projectEnd;
private List roles;
}
У меня есть два класса, расширяющие SearchItemData:

Код: Выделить всё

@EqualsAndHashCode(callSuper = true)
@Data
public class ProjectData extends SearchItemData {
// ...
}

@EqualsAndHashCode(callSuper = true)
@Data
public class ProcurementData extends SearchItemData {
// ...
}
При получении результата от конечной точки он упаковывается в объект SearchItemPage:

Код: Выделить всё

@Data
public class SearchItemPage {
int page;
int pageCount;
int pageSize;
long totalResults;
// TODO anyOf
@Schema(
description = "Array of projects and/or procurements, matching the search parameters",
oneOf = { ProjectData.class, ProcurementData.class }
)
List results;
Long procurementCount;
Long projectCount;
}
Проблема в том, что при развертывании приложения и открытии сгенерированного пользовательского интерфейса Swagger я получаю следующее:
Изображение

Схема для ProjectData и ProcurementData верна, но похоже, что наследование не работает аннотация "oneOf" не очень хорошо сочетается. Я вижу логику того, почему все идет не так, но не могу найти решение.
Я попробовал определить список как List

Подробнее здесь: https://stackoverflow.com/questions/789 ... tract-fiel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»