如何让子类继承的父类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
相关产品推荐
相关产品推荐

