【问题标题】:How to hide a request field in Swagger API如何在 Swagger API 中隐藏请求字段
【发布时间】:2018-11-12 13:21:03
【问题描述】:

我想在模型中隐藏“id”项,在java中怎么做?

【问题讨论】:

标签: java swagger


【解决方案1】:

在 Swagger API v2 中隐藏请求字段:

 @ApiModelProperty(hidden = true) 
 private String id;

在 OpenAPI v3 中:

@Schema(accessMode = Schema.AccessMode.READ_ONLY)
private String id;

【讨论】:

  • 尝试提供有关您提供的代码的更多信息
  • @Shobi 大摇大摆的人会忽略该属性。
【解决方案2】:
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(accessMode = ApiModelProperty.AccessMode.READ_ONLY)
private String id;

另见:https://github.com/springfox/springfox/issues/2816

【讨论】:

    【解决方案3】:

    您可以将@HiddenSwagger Core 2.X 一起使用

    @Hidden -- 隐藏资源、操作或属性

    来自上述链接的示例:将给定的资源、类或 bean 类型标记为隐藏,在读取/解析时跳过。

    @Path("/user")
    @Produces({"application/json", "application/xml"})
    public class HiddenAnnotatedUserResourceMethodAndData {
        UserData userData = new UserData();
    
        @POST
        @Hidden
        @Operation(summary = "Create user",
                description = "This can only be done by the logged in user.")
        @Path("/1")
        public Response createUser(
                @Parameter(description = "Created user object", required = true) User user) {
            userData.addUser(user);
            return Response.ok().entity("").build();
        }
    
        @POST
        @Operation(summary = "Create user",
                description = "This can only be done by the logged in user.")
        @Path("/2")
        public Response createUserWithHiddenBeanProperty(
                @Parameter(description = "Created user object", required = true) UserResourceBean user) {
            return Response.ok().entity("").build();
        }
    }
    

    上面的输出

    openapi: 3.0.1
    paths:
      /user/2:
        post:
          summary: Create user
          description: This can only be done by the logged in user.
          operationId: createUserWithHiddenBeanProperty
          requestBody:
            description: Created user object
            content:
              '*/*':
                schema:
                  $ref: '#/components/schemas/UserResourceBean'
            required: true
          responses:
            default:
              description: default response
    components:
      schemas:
        UserResourceBean:
          type: object
          properties:
            foo:
              type: string
    

    【讨论】:

    • 我现在有点老了,但是这个答案并没有填补这个问题,因为你隐藏了resource (controller),他真正需要的是只隐藏文件id。跨度>