Пустой массив не выбирается по умолчанию для определенной модели в сгенерированном коде Open API AKA Swagger

При разработке API я определяю модель UserGeo, которая содержит два поля — domain (массив строк) и country (массив строк).

Пустой список [] следует использовать в теле запроса, если для domain не указано значение. Но при определении свойства default как [] генерируемый код Spring не назначает пустой ArrayList‹›, также известный как [].

Прикрепляю примеры кода:

Определение чванства:

definitions:
  UserGeo:
    type: "object"
    properties:
      country:
        type: "array"
        items:
          type: "string"
      domain:
        type: "array"
        items:
          type: "string"
        default: []

Это не устанавливает значение домена по умолчанию в пустой список, проверьте этот сгенерированный код Spring/Java:

.
.
public class Classification   {
  @JsonProperty("country")
  @Valid
  private List<String> country = null;

  @JsonProperty("domain")
  @Valid
  private List<String> domain = null;
.
.

Принимая во внимание, что когда я определяю поле домена как required, даже не определяя его по умолчанию, сгенерированный код назначает пустой список по умолчанию для поля domain.

definitions:
  UserGeo:
    type: "object"
    required:
      - "domain"
    properties:
      country:
        type: "array"
        items:
          type: "string"
      domain:
        type: "array"
        items:
          type: "string"

И, как уже упоминалось, сгенерированный код имеет пустой список, назначенный для домена.

public class UserGeo   {
  @JsonProperty("country")
  @Valid
  private List<String> country = null;

  @JsonProperty("domain")
  @Valid
  private List<String> domain = new ArrayList<String>();

И проблема в том, что если для них требуется поле, я хочу пометить запрос как BadRequest, когда ключ недоступен, вместо того, чтобы назначать ему пустой массив.

Может ли кто-нибудь сказать мне, как заставить массив использовать значение по умолчанию [] без необходимости? и как я могу убедиться, что мой требуемый отмеченный элемент массива вызывает BadRequest вместо того, чтобы назначать свойство по умолчанию []?


person im_bhatman    schedule 24.01.2021    source источник


Ответы (1)


У меня такая же проблема, но изменена логика, чтобы использовать minItems в массиве и получить BadRequest, если массив пуст:

definitions:
  UserGeo:
    type: "object"
    required:
      - "domain"
    properties:
      country:
        type: "array"
        items:
          type: "string"
      domain:
        type: "array"
        minItems: 1
        items:
          type: "string"

ХТН

person Magic Wand    schedule 10.05.2021