微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Open API AKA Swagger 生成的代码中,未选择空数组作为定义模型的默认值

如何解决在 Open API AKA Swagger 生成的代码中,未选择空数组作为定义模型的默认值

在设计 API 时,我定义了一个 UserGeo 模型,该模型包含两个字段 - domain(字符串数组)和 country(字符串数组)。

如果没有为 [] 提供值,则应在请求正文中使用空列表 domain。 但是在将 default 属性定义为 [] 时,生成Spring 代码不会分配空的 ArrayList aka []

附上代码示例:

招摇定义:

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 而不是将[] 分配给属性

解决方法

我自己也有同样的问题,但更改了逻辑以在数组上使用 minItems 并在数组为空时获取 BadRequest:

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

HTH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。