赞
踩
在我们正常的spring web框架下请求参数与响应参数使用的有许多相同的对象,当我们引入swagger2框架后,每个接口的参数(请求/响应)都会包含所有的字段。
有人也许使用过@JsonIgnoreProperties或@JsonIgnore进行参数的排除,这些注解有一个弊端,会影响所有的JSON序列化问题,并且所有使用此参数对象的接口都会排除使用该注解的字段。
还有一种做法是每个接口参数都使用单独的VO类,这种方式其中一个问题是项目中存在着大量的VO类来适应文档,并且VO类进入项目后需要进行单独转换为对应的业务需要的对象,如果参数量或层级比较大的话,此转换工作量比较大,并且与项目的耦合性也是比较高的。
经历了种种方案后,作者的做法是使用注解进行分类参数。接下来我们看一下具体的使用方式。
项目github地址:https://github.com/weiguangfu/springfox-swagger2-plus
目前扩展的swagger2版本为:2.7.0、2.8.0、2.9.1、2.9.2
对应扩展的最新版本为:2.7.0-1-beta4、2.8.0-1-beta2、2.9.1-1-beta2、2.9.2-1-beta2
接下来以2.7.0进行举例
由于swagger2的版本增强的方式不同,所以我定义的版本与swagger2的版本是一一对应的。例如:swagger2的版本为2.7.0,对应的版本为2.7.0-X-X方式。
更新说明地址:https://github.com/weiguangfu/springfox-swagger2-plus/blob/master/update.md
默认引入springfox-swagger2-plus项目时自动引入swagger2对应的版本. springfox-swagger-ui也会自动被引入.
<dependency>
<groupId>cn.weiguangfu</groupId>
<artifactId>springfox-swagger2-plus</artifactId>
<version>2.7.0-1</version>
</dependency>
此配置为了适应配置文件方式的profile, 可以配置停用线上swagger2的增强
# 此配置标志着开启增强, 目的是为了可以屏蔽线上Swagger2增强.
# 不编辑此配置或者值为enable: false则不开启Swagger2增强.
swagger:
plus:
enable: true
仅增加@EnableSwagger2Plus注解在原Swagger2的配置类上即可,其他配置与swager2原配置相同。
/** * @EnableSwagger2Plus注解标志着开启Swagger2Plus, * 此注解同时开启Swagger2的注解. */ @Configuration @EnableSwagger2Plus public class Swagger2Config { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2).groupName("push-test") .apiInfo(new ApiInfoBuilder() .title("增强开源测试") .description("测试增强API是否可用") .termsOfServiceUrl("") .version("2.7.0-1-beta4") .build()) .directModelSubstitute(Byte.class, Integer.class) .select() .apis(RequestHandlerSelectors.basePackage("cn.weiguangfu.swagger2.plus.demo.controller")) .paths(PathSelectors.any()) .build(); } }
/** * @ApiPlus配置并且设置value=true表示开启当前Controller的API增强 */ @RestController @RequestMapping(value = "/swagger2/plus") @ApiPlus(value = true) @Api("swagger2plus测试类") public class Swagger2PlusController { /** * @ApiGroup设置请求与响应的参数分组, 注解参数如下 * 1. groups: 进行分组区别的Class对象. * 2. requestExecution: 请求执行方式 参见{@link cn.weiguangfu.swagger2.plus.enums.ApiExecutionEnum} * 3. responseExecution: 响应执行方式 参见{@link cn.weiguangfu.swagger2.plus.enums.ApiExecutionEnum} */ @PostMapping("/demo") @ApiOperation("swagger2plus测试方法") @ApiGroup(groups = Swagger2PlusGroups.Demo.class, responseExecution = ApiExecutionEnum.EXCLUDE) public Swagger2Plus demo(@RequestBody Swagger2Plus swagger2Plus) { return swagger2Plus; } }
@ApiModel("Swagger2增强对象") public class Swagger2Plus { @ApiModelProperty("名称") @ApiRequestInclude(groups = {Swagger2PlusGroups.Demo.class}) @ApiResponseExclude(groups = {Swagger2PlusGroups.Demo.class}) @ApiRequestFieldRequired(groups = {Swagger2PlusGroups.Demo.class}) private String name; @ApiModelProperty("版本") @ApiRequestInclude(groups = {Swagger2PlusGroups.Demo.class}) @ApiResponseExclude(groups = {Swagger2PlusGroups.Demo.class}) private String version; @ApiModelProperty("子Swagger2增强对象") private Swagger2Plus swagger2Plus; ... }
2.7.0-1版本的目前开始添加字段是否必填的功能, 目前测试中, 等稳定后其他版本也会陆续上线.
由于目前2.7.0-1-bate4我们在进行使用中,其他版本目前只有简单测试,由于是耦合性非常低,大家可以放心接入自己的项目,如果有任何问题或者意见与建议,欢迎大家来github给我留言或者发送邮件weiguangfu520@163.com。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。