如何在Spring-Data-Rest中自定义Swagger-UI仅暴露实体的GET方法
只在Swagger中暴露Spring Data Rest实体的GET方法解决方案
嘿,这问题我熟!既然你用Spring Data Rest自动生成了实体的REST接口,又不想在Swagger里暴露POST/PUT/DELETE这些非必需方法,咱们直接修改Swagger的Docket配置就能搞定,完全不用额外写Controller或者Service~
核心思路
Spring Data Rest会基于你的Repository自动生成CRUD接口,Swagger默认会扫描所有这些接口。我们要做的就是在Swagger配置里过滤掉非GET请求的接口,如果需要的话还可以进一步限定只针对某个实体的路径。
修改后的Swagger配置类
下面是调整后的完整配置代码,你可以根据自己的需求选择不同的过滤粒度:
方式1:全局只暴露所有实体的GET方法
这个配置会把所有Spring Data Rest生成的接口里的GET方法都留在Swagger文档中,其他方法全部隐藏:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() // 自定义筛选逻辑:只保留支持GET方法的请求处理程序 .apis(requestHandler -> requestHandler.requestMappingInfo() .getMethodsCondition() .getMethods() .contains(HttpMethod.GET) ) // 匹配所有路径(你也可以根据需要缩小范围) .paths(PathSelectors.any()) .build(); } }
方式2:只暴露指定实体的GET方法
如果你只想针对某一个实体(比如User实体,默认路径是/users)暴露GET方法,可以结合路径匹配来精准过滤:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(requestHandler -> requestHandler.requestMappingInfo() .getMethodsCondition() .getMethods() .contains(HttpMethod.GET) ) // 只匹配User实体的所有路径(替换成你的实体路径) .paths(PathSelectors.ant("/users/**")) .build(); } }
代码解释
apis(requestHandler -> ...):这里传入了一个自定义的断言逻辑,检查每个请求处理程序是否支持GET方法,不满足的就会被Swagger排除掉。paths(PathSelectors.ant(...)):用来限定Swagger扫描的路径范围,如果你有多个实体,只想关注其中一个,就用这个来缩小范围。- 因为你没有自定义Controller/Service,所有接口都是Spring Data Rest自动生成的,这个配置可以精准过滤掉你不需要的非GET接口。
内容的提问来源于stack exchange,提问作者Rahul Raj Sonu
相关产品推荐
相关产品推荐

