Swagger
1.简介
号称世界上最流行的Api框架
RestFul Api文档在线自动生成工具
直接运行,可以在线测试API接口
支持多种语言(java,PHP..)
2.enable是否启动swagger,如果为false,swagger就不能再浏览器中访问,
测试代码:
@Configuration//配置类 @EnableSwagger2 public class SwaggerConfig { //配置了Swagger的Docket的bean实例 @Bean public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(false)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问 .select() //RequestHandlerSelectors,配置要扫描接口的方式 //basePackage指定要扫描的包 //any(),扫描全部包 //none(),不扫描 //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象 //withMethodAnnoation:扫描方法上的注解 .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller")) .paths(PathSelectors.ant("/lian/**")) .build(); } private ApiInfo apiInfo(){ //作者信息 Contact contact=new Contact("lian","https://mail.qq.com/","3082920@qq.com"); return new ApiInfo( "lian的api文档", "即使再小的帆", "v1.0", "https://mail.qq.com/", contact, "Apache 2.0", "https://zhuanlan.zhihu.com/p/259565080", new ArrayList() ); } }
访问swagger-ui.html就会出现下面页面:
3.但是问题来了,如果我希望我的swagger在生产环境中使用,在发布环境不使用那怎么办?
1。准备好两个配置文件
application-dev.properties 为生产环境
server.port=8081
application-pro.properties 为发布环境
server.port=8082
测试代码:
@Configuration//配置类 @EnableSwagger2 public class SwaggerConfig { //配置了Swagger的Docket的bean实例 @Bean public Docket docket(Environment environment){ Profiles profiles=Profiles.of("dev","test"); //通过判断是否处在自己设定的环境中 boolean flag=environment.acceptsProfiles(profiles); System.out.println(flag); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(flag)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问 .select() //RequestHandlerSelectors,配置要扫描接口的方式 //basePackage指定要扫描的包 //any(),扫描全部包 //none(),不扫描 //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象 //withMethodAnnoation:扫描方法上的注解 .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller")) .paths(PathSelectors.ant("/lian/**")) .build(); }
运行接结果:
注意访问的是8082端口
4.添加Api测试
在swagger配置类中可以配置多个Docket对象,并通过groupName用来记录代码的分工
@Configuration//配置类 @EnableSwagger2 public class SwaggerConfig { //配置了Swagger的Docket的bean实例 @Bean public Docket docket(Environment environment){ Profiles profiles=Profiles.of("dev","test"); //通过判断是否处在自己设定的环境中 boolean flag=environment.acceptsProfiles(profiles); System.out.println(flag); return new Docket(DocumentationType.SWAGGER_2).groupName("A") .apiInfo(apiInfo()) .enable(flag)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问 .select() //RequestHandlerSelectors,配置要扫描接口的方式 //basePackage指定要扫描的包 //any(),扫描全部包 //none(),不扫描 //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象 //withMethodAnnoation:扫描方法上的注解 .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller")) .paths(PathSelectors.ant("/lian/**")) .build(); } @Bean public Docket docket2(){return new Docket(DocumentationType.SWAGGER_2).groupName("B");} @Bean public Docket docket3(){return new Docket(DocumentationType.SWAGGER_2).groupName("C");} //配置swagger信息的apiinfo private ApiInfo apiInfo(){ //作者信息 Contact contact=new Contact("lian","https://mail.qq.com/","3082920@qq.com"); return new ApiInfo( "lian的api文档", "即使再小的帆", "v1.0", "https://mail.qq.com/", contact, "Apache 2.0", "https://zhuanlan.zhihu.com/p/259565080", new ArrayList() ); } }
controller测试类:
package com.lian.controller; import com.lian.pojo.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @RequestMapping("/t") public String mytest(){ return "hello,swagger!"; } //只要我们的接口中的返回值存在实体类,它就会被扫描到swagger中 @PostMapping(value = "/user") public User user(){ return new User(); } @ApiOperation("Post测试类") @GetMapping (value = "/hello2") public String hello2(@ApiParam("用户名")User username){ return "hello"+username; } @ApiOperation("Post测试类") @PostMapping(value = "/postt") public User postt(@ApiParam("用户名")User user){ int i; return user; } }
在前端页面可以清楚看到页面是否正常
5.总结
对于swagger的使用:会更改页面swagger-ui.html的信息,会加注解,会看页面swagger-ui.html哪里错了即可