繁体   English   中英

如何在 spring 控制器中使用枚举作为参数,用“spring”语言扩展由 swagger-codegen 生成的接口

[英]How to use enum as parameter in spring controller that extends interface generated by swagger-codegen with "spring" language

假设我有一个用枚举模式定义的参数:

paths:
  /echo:
    get:
      parameters:
      - name: someEnum
        in: query
        required: true
        schema:
          type: string
          enum: [A, B, C]
      responses:
        200:
          description: Success
          content:
            text/plain:
              schema:
                type: string

Swagger codegen 为spring语言生成以下 Java 接口:

    @ApiOperation(value = "", nickname = "echoGet", notes = "", response = String.class, tags={  })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "Success", response = String.class) })
    @RequestMapping(value = "/echo",
        produces = { "text/plain" }, 
        method = RequestMethod.GET)
    default ResponseEntity<String> echoGet(@NotNull @ApiParam(value = "", required = true, allowableValues = "A, B, C") @Valid @RequestParam(value = "someEnum", required = true) String someEnum) {
        if(getObjectMapper().isPresent() && getAcceptHeader().isPresent()) {
        } else {
            log.warn("ObjectMapper or HttpServletRequest not configured in default EchoApi interface so no example is generated");
        }
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }

生成的接口中someEnum类型是 String。 如何用带有“A”、“B”、“C”值的 Java 枚举替换它?

components/schemas部分定义您的枚举架构,并从参数定义中$ref它,如下所示。 在这种情况下,Swagger Codegen 将生成枚举作为实际的 Java 枚举。

openapi: 3.0.0
...

paths:
  /echo:
    get:
      parameters:
      - name: someEnum
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/MyEnum'
      ...

components:
  schemas:
    MyEnum:
      type: string
      enum: [A, B, C]

将命名类型添加到架构并使用它:

paths:
  /echo:
    get:
      parameters:
        - name: someEnum
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/MyEnum'
      responses:
        200:
          description: Success
          content:
            text/plain:
              schema:
                type: string
components:
  schemas:
    MyEnum:
      type: string
      enum: [A,B,C]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM