简介
在一个项目中wagger经常在开发阶段或者测试阶段需要开始,但是在生产环境是中我们是不需要开启swagger的。出于这样的需求我们可以使用spring自带的profile来控制是否开启swagger。
引用jar
本次代码中使用的swagger为3.0.0版本,官方也是在3.0之后的版本更换了swagger的jar包以及部分使用的方式。
implementation 'io.springfox:springfox-boot-starter:3.0.0'
实例
swagger和profile这里不做介绍,直接上代码
1.初始化swagger config,获取当前激活的profile方式之前也讲过,可以使用自己合适的方式。
@Configuration
@EnableOpenApi
public class SwaggerConfig {
@Bean
public Docket createSwaggerDocket() {
// 添加一个header, 3.0之后这样添加
RequestParameter requestParameter = new RequestParameterBuilder()
.name(Constant.TOKEN)
.in(ParameterType.HEADER)
.required(false)
.build();
List<RequestParameter> list = new ArrayList<>();
list.add(requestParameter);
return new Docket(DocumentationType.OAS_30) // 3.0后改为这个
.apiInfo(apiInfo())
.enable(!ProfileUtils.getActiveProfile().equals("prop")) // profile为prop时启动swagger
.globalRequestParameters(list)
.select()
.apis(RequestHandlerSelectors.basePackage("com.X.X.controller"))
.paths(PathSelectors.any())
.build();
}
/**
* config swagger info
*
* @return ApiInfo
*/
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("项目的标题")
.description("项目详细描述")
.version("1.0")
.build();
}
2.获取profile的utils,本文采用实现ApplicationContextAware的方式,从上下文中获取profile。
@Component
public final class ProfileUtils implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static String getActiveProfile() {
String[] profiles = context.getEnvironment().getActiveProfiles();
if (profiles.length != 0) {
return profiles[0];
}
return "";
}
}
3.controller层使用
@Api(tags = "TEST API")
@Validated
@RestController
public class TestController {
@Autowired
private TestService testService;
@ApiOperation("Test swaager api") // swagger当前接口的描述
@PostMapping("/v1/user")
public String addUser(@RequestBody TestReqDto testReqDto) {
// 业务处理
return "success";
}
}