首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在spring控制器中使用enum作为参数,用"spring“语言扩展swagger-codegen生成的接口

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

Stack Overflow用户
提问于 2019-08-13 18:00:17
回答 2查看 838关注 0票数 1

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

代码语言:javascript
复制
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接口:

代码语言:javascript
复制
    @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。如何用Java枚举替换为"A“、"B”、"C“值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-13 19:15:59

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

代码语言:javascript
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2019-08-13 19:15:33

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

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57475420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档