open api 3 默认数组生成

open api 3 default Array generation

我的API定义如下:

/api:
  get:
  ...
  parameters:
     - name: "tags"
       in: "query"
       description: "some description"
       required: false
       schema:
         type: "array"
         items:
           type: "string"
  ....

我们正在使用 openapi-generator-maven-plugin:3.3.5 进行代码生成。

生成的API参数:@ApiParam(value = "description", defaultValue = "new ArrayList<>()")

控制器接收到的实际参数不为空,包含文字new ArrayList<>()作为第一个元素:

String first = tags.get(0);
assert "new ArrayList<>()".equals(first) //true

我找不到任何控制此行为的参数值(如 defaultValue)。 如何使参数为 null 或至少为空列表?

在 Spring 启动应用程序中使用 sagger:

 <dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger2</artifactId>
  <version>${io.springfox.swagger.version}</version>
</dependency>

openapitools 生成器配置选项

  <configOptions>
      <dateLibrary>java8</dateLibrary>
      <serializationLibrary>jackson</serializationLibrary>
      <interfaceOnly>true</interfaceOnly>
      <delegatePattern>true</delegatePattern>
      <useTags>true</useTags>
  </configOptions>

较新的生成器版本已修复此问题:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.3.0</version>
    ...
</plugin>

此外,添加 Jackson databind-nullable

 <dependency>
  <groupId>org.openapitools</groupId>
  <artifactId>jackson-databind-nullable</artifactId>
  <version>0.2.1</version>
</dependency>

这里有同样的问题,但无法正常工作。 但是您可以添加一些验证以查看列表是否包含至少一个元素,例如

/api:
  get:
  ...
  parameters:
   - name: "tags"
     in: "query"
     description: "some description"
     required: false
     schema:
       type: "array"
       minItems: 1
       items:
         type: "string"
  ....