当前位置: 首页 > 知识库问答 >
问题:

空数组没有被选为开放API中定义模型的默认值,也就是斯瓦格生成的代码

华温书
2023-03-14

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

如果没有为提供值,则应在请求正文中使用空List[]。但是在将默认属性定义为[]时,生成的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;
.
.

然而,当我将域字段定义为必需的时,甚至没有用默认值定义它,生成的代码将为分配一个空列表作为默认值。

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,而不是为其分配一个空数组。

有谁能告诉我如何让数组在不需要的情况下使用默认的[]?如何确保所需的已标记数组项引发一个坏请求,而不是将默认值[]分配给属性?


共有1个答案

酆鸿哲
2023-03-14

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

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

 类似资料:
  • 我正在使用swagger-codgen为我的spring boot应用程序生成java模型类,并将它们序列化为json。默认情况下,这些模型都包含带有空值的可选属性。 我想为spring配置swagger codgen,以便在所有类的顶部包含此注释:,以便在序列化的json中不包含空值属性。 我怎样才能做到这一点?是否有配置选项,或者我必须手动扩展 spring 代码生成?

  • 我有一个枚举类来存储一些像这样的分类值。 每种类型都有pydantic模型。例如: 我有这样的字典: 我有一个FastAPI路由,用户需要输入字段类型名称作为字符串(从FastAPI文档中的下拉列表),并根据选择的类型提供类型属性。如果用户选择type=“images”,则会提供相应的pydantic模型“ImageModel”供用户填写,以此类推。 选择类型名称后,有没有办法产生对应的pydan

  • 我的API定义如下: 我们使用生成代码。 生成的API参数:

  • 问题内容: 我有一个spring控制器方法,该方法接收一些可选数组作为参数。它们不是必需的,但是我希望它们不为null,而当它们不在controller方法接收的参数中时,只是空数组。我知道,我可以检查它们是否为空,然后将其分配为新对象,但这会生成许多样板代码。另外,当我尝试执行以下操作时: 当我在网址中未提供参数(这很奇怪)时,我收到第400条错误,原因是必填字段为false。 大家有什么想法吗

  • 我正在使用openapi生成器生成typescript获取。我喜欢使用openapi生成器,因为它支持DTO作为查询参数,如果我有10个这样的查询参数,则会将方法生成为RequestDto。这太棒了,想象一下有10个参数并排作为方法输入,噩梦。无论如何,这很好,但当你这样使用它时: java-jar-openapi-generator-cli-4.0.3。jar生成-i/swagger-spec.

  • 我打算使用JAXB从xsd生成类,并使用xsd中的默认值。但当我将xs:boolean元素的默认值设置为“true”时。该值未设置,我得到空指针异常,因为布尔对象值尚未初始化为true。 我做错了什么?我们可以只为xs:string而不是xs:boolean设置默认值吗? 生成的xml文件是这样的: 当我尝试调用函数时: 或 我得到了空指针错误。虽然在我的代码中我已经处理了这个空值。 我只是好奇为