文档
- 快速开始
- Knife4j 4.0 迭代计划
- 如何贡献代码
- 序章
- 社区
- 增强特性
- 3.1 增强模式
- 3.2 i18n 国际化
- 3.3 接口添加作者
- 3.4 自定义文档
- 3.5 访问权限控制
- 3.6 接口排序
- 3.7 分组排序
- 3.8 请求参数缓存
- 3.9 动态请求参数
- 3.10 导出离线文档
- 3.11 过滤请求参数
- 3.12 包含请求参数
- 3.13 搜索API接口
- 3.14 清除缓存
- 3.15 动态请求参数添加文档注释
- 3.16 动态响应参数添加文档注释
- 3.17 自定义Host
- 3.18 afterScript
- 3.19 OAuth2
- 3.20 导出 Postman
- 3.21 全局参数
- 3.22 自定义 Swagger Models 名称
- 3.23 自定义主页内容
- 3.24 自定义 Footer
- 3.25 JSR303
- 3.26 禁用调试
- 3.27 禁用搜索框
- 3.28 禁用 OpenApi 结构显示
- 3.29 版本控制
- 生态中间件
- 升级
中间件
- 中间件介绍
- Aggregation 微服务聚合中间件
- Desktop 独立渲染组件
OAS 简介
- OAS 简介
- OpenAPI 规范
- Java 注解
实战指南
- 示例代码
- Spring 单体架构
- Spring 微服务架构
- OAuth 2.0
- 微服务聚合实战
- ASP.NET Core
- Springfox 源码系列
- Springfox 源码系列
- springfox 源码分析(一) 程序入口
- springfox 源码分析(二) 初探 mapstruct
- springfox 源码分析(三) 初探 Spring Plugin 插件系统
- springfox 源码分析(四) 配置类初始化
- springfox 源码分析(五) Web 配置类 Plugin 插件的使用
- springfox 源码分析(六) Web 配置类扫描包作用探索
- springfox 源码分析(七) 文档初始化
- springfox 源码分析(八) 遍历接口获取 Model 对象
- springfox 源码分析(九) 文档初始化分组
- springfox 源码分析(十) 遍历接口获取 Model 对象
- springfox 源码分析(十一) 自定义添加 Swagger Models 功能实现
- springfox 源码分析(十二) 遍历接口获取 ApiDescription 集合
- springfox 源码分析(十三) 自定义扩展实现接口的排序
- springfox 源码分析(十四) 归档得到 ApiListing 接口集合
- springfox 源码分析(十五) 归档得到 Documentation 文档对象
- springfox 源码分析(十六) 分组接口 swagger-resouces
- springfox 源码分析(十七) Swagger2 接口文档示例接口 api-docs
- springfox 源码分析(十八) 自定义扩展实现分组的排序
- springfox 源码分析(十九) guava 库学习
- springfox 源码分析(二十一) 忽略参数 Class 类型
springfox 源码分析(二十一) 忽略参数 Class 类型
我们在前面的源码过程中,了解了springfox的基本工作原理,接下来,我们可以通过使用springfox给我们提供的外部接口,来处理一些我们工作中碰到的问题,或者进行自定义扩展
本篇主要介绍如何来忽略某些特定的参数Class类型
先举一个例子,假如我们的接口是这样的:
@PostMapping("/createOr33der")
@ApiOperation(value = "创建订单")
public Rest<Order> createOrdetr(@RequestBody Order order, HttpSession httpSession){
Rest<Order> r=new Rest<>();
r.setData(order);
return r;
}
我们在我们的方法上接收了一个 HttpSession
的参数对象,此时,我们来看我们的文档页面效果
在我们的文档介绍页面中,多出了很多我们自认为不必要的参数,因为 HttpSession
对象我们并不需要传参处理,该对象我们是直接拿来使用对session进行操作的
那么,针对这种情况,我们应该如何处理呢(即把HttpSession的参数处理掉,不显示)?
目前有两种方法:
- 在方法的参数前,添加
@ApiIgnore
注解 - 在创建Docket对象时,指定忽略相关的Class
第一种方式
先来看第一种的代码处理方式:
@PostMapping("/createOr33der")
@ApiOperation(value = "创建订单")
public Rest<Order> createOrdetr(@RequestBody Order order,@ApiIgnore HttpSession httpSession){
Rest<Order> r=new Rest<>();
r.setData(order);
return r;
}
我们在 HttpSession
的参数前,添加 @ApiIgnore
注解,那么此时springfox会帮助我们忽略此参数
@ApiIgnore
的作用方法不仅仅在参数上,还可以作用于整个接口Controller,或者单个接口
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface ApiIgnore {
/**
* A brief description of why this parameter/operation is ignored
* @return the description of why it is ignored
*/
String value() default "";
}
其作用范围是 METHOD
、 TYPE
、 PARAMETER
第二种方式
虽然第一种方式达到了我们的目的,但是细心的朋友可能会发现,如果目前的接口方法中,存在大量的 HttpSession
参数,那么每个方法都需要更改一遍?那岂不是炸了
所以针对这种情况,springfox在我们创建Docket对象时,提供了入口,我们在创建Docket对象时就可以默认传入需要忽略的类Class,这样我们就不需要每个接口都更改一遍了
先来看Docket的部分源码
/**
* Adds ignored controller method parameter types so that the framework does not generate swagger model or parameter
* information for these specific types.
* e.g. HttpServletRequest/HttpServletResponse which are already included in the pre-configured ignored types.
*
* @param classes the classes to ignore
* @return this Docket
* @see springfox.documentation.spi.service.contexts.Defaults#defaultIgnorableParameterTypes()
*/
public Docket ignoredParameterTypes(Class... classes) {
this.ignorableParameterTypes.addAll(Arrays.asList(classes));
return this;
}
传入Class的集合
springfox框架默认忽略的类型在 Default
中
private void initIgnorableTypes() {
ignored = newHashSet();
ignored.add(ServletRequest.class);
ignored.add(Class.class);
ignored.add(Void.class);
ignored.add(Void.TYPE);
ignored.add(HttpServletRequest.class);
ignored.add(HttpServletResponse.class);
ignored.add(HttpHeaders.class);
ignored.add(BindingResult.class);
ignored.add(ServletContext.class);
ignored.add(UriComponentsBuilder.class);
ignored.add(ApiIgnore.class); //Used to ignore parameters
}
此时,我们在创建Docket对象时,做一下更改,如下:
@Bean(value = "groupRestApi")
@Order(value = 1)
public Docket groupRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(groupApiInfo())
.groupName("分组接口")
.select()
.apis(RequestHandlerSelectors.basePackage("com.swagger.bootstrap.ui.demo.group"))
.paths(PathSelectors.any())
.build()
.ignoredParameterTypes(HttpSession.class) //添加忽略类型
.extensions(Lists.newArrayList(new OrderExtensions(2))).securityContexts(Lists.newArrayList(securityContext(),securityContext1())).securitySchemes(Lists.<SecurityScheme>newArrayList(apiKey(),apiKey1()));
}
通过ignoredParameterTypes方法,传入 HttpSession
的class,告诉springfox框架该class需要忽略
最终的效果如下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论