You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让子类继承的父类post方法在Swagger中不可见?

问题:子类隐藏Swagger中继承的POST方法

我有一个资源父类GenericResource,代码如下:

public class GenericResource{
  @POST
  @Operation(summary = "Create new element", description = "Create a new element by body")
  public Response post(@RequestBody(description = "Element to create", required = true) ClassRequestEntity data) throws Exception {
    ....
  }
}

我有一个继承该类的子类Info,多数子类仅继承并使用该post方法,但这个子类不需要该方法。于是我尝试如下实现:

public class Info extends GenericResource{
  @Operation(hidden = true)
  @Schema(hidden = true)
  @Deprecated
  @Override
  public Response post(@RequestBody(description = "Element to create", required = true) ClassRequestEntity data) throws Exception {
     throw new UnsupportedOperationException("....");
  }
}

我希望该post方法在Swagger中不可见,但所有尝试均未成功,请问是否有可行的解决办法?


解决方案
  • 使用@Hidden注解(OpenAPI 3.x+):如果你的项目使用OpenAPI 3.x版本的Swagger依赖(比如springdoc-openapi),直接在重写的post方法上添加@Hidden注解。这个注解专门用于隐藏接口文档,在继承场景下生效更可靠。
    示例代码:

    public class Info extends GenericResource{
      @Hidden
      @Override
      public Response post(@RequestBody(description = "Element to create", required = true) ClassRequestEntity data) throws Exception {
         throw new UnsupportedOperationException("该方法不被支持");
      }
    }
    
  • 配置Swagger过滤规则:如果是Spring Boot项目,可在Swagger配置类中主动排除该接口。比如通过OpenAPI配置的pathsToExclude属性指定要隐藏的接口路径,或者实现OperationCustomizer接口,在自定义逻辑中过滤掉该子类post方法对应的操作。

  • 改用组合模式替代继承:如果业务场景允许,子类不要直接继承GenericResource,而是通过组合的方式复用父类中需要的方法,从根源上避免不需要的post方法被Swagger扫描到。

另外注意:早期Swagger 2.x版本在处理继承类的注解覆盖时可能存在bug,建议升级到适配OpenAPI 3的最新依赖版本(比如springdoc-openapi v1.6+),能有效解决这类注解不生效的问题。


内容的提问来源于stack exchange,提问作者matteo baudino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:13:12