openApi 生成器 spring 模板省略了属性的默认值

问题描述 投票:0回答:1

我在下面附上了基本的

OAS 3.0
模式。使用 editor.swagger.io 时,在展开架构详细信息时,我可以在生成的页面中查看属性的默认值。

openapi: 3.0.3
info:
  title: API Specification
  version: 1.0.0
servers:
  - url: https://localhost
paths:
  /operation:
    post:
      operationId: run
      requestBody:
        description: Description
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Request'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Response'
        '400':
          description: Bad request
        '500':
          description: Internal Server Error
components:
  schemas:
    Request:
      type: object
      properties:
        x:
          type: number
          example: 0
          default: 2
    Response:
      type: object
      properties:
        id:
          type: integer

但是,当从编辑器顶部菜单中使用

spring
引擎生成服务器存根时,我注意到
defaultValue
注释的
@Schema
属性未填充。

  // ...
  @JsonProperty("x")
  private BigDecimal x = new BigDecimal(2);
  // ...
  /**
   * Get x
   * @return x
   **/
  @Schema(example = "0", description = "")
  
    @Valid
    public BigDecimal getX() {
    return x;
  }

如您所见,生成的服务器类正确实例化了默认变量。 这确实是我缺少的

defaultValue
注释的属性
@Schema
。我已经看到这个属性被包含在 OAS 中的
@Parameter
对象中。 我想在上面的注释中看到的是附加属性,如下所示:

  @Schema(example = "0", description = "", defaultValue="2")

这是spring引擎模板的bug吗?

如果我的问题有一个已知的解决方案并且需要较少的维护,我希望避免立即诉诸自定义胡子模板。

swagger-ui openapi default-value openapi-generator swagger-editor
1个回答
0
投票

对这个问题进行一点调查

实际上你在生成的源中有两个问题:

  1. 生成的界面中的

    @Parameter
    注释生成得不太正确:

    ResponseEntity<Response> run(@Parameter(in = ParameterIn.DEFAULT, description = "Description", required=true, schema=@Schema()) @Valid @RequestBody Request body);
    

    如您所见,

    schema
    参数设置不正确。

  2. 正如您所描述的,生成的
  3. @Schema

    类中的

    Request
    注释没有
    defaultValue
    参数:
    @Schema(example = "0", description = "")
    @Valid
    public BigDecimal getX() {
        return x;
    }
    

    
    
  4. 我尝试了
org.openapi.generator

Gradle 插件(类似于 swagger codegen),结果是相同的:


    未设置
  1. schema

    注释中的

    @Parameter
    参数:
    default ResponseEntity<Response> run(
          @Parameter(name = "Request", description = "Description", required = true) @Valid @RequestBody Request request
    ) {
        // ...
    }
    

  2. 同样的行为。
一般来说,
Request

类的代码是正确生成的:

x
字段被初始化为默认值。
public class Request   {
    @JsonProperty("x")
    private BigDecimal x = new BigDecimal(2);

    // ...
}

你真的需要适当的注释吗?

© www.soinside.com 2019 - 2024. All rights reserved.