接上一篇博客继续
Swagger配置扫描接口
扫描接口方式
public Docket getDocket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
/*RequestHandlerSelectors:配置扫描接口的方式
* basePackage:指定扫描的包
* any:扫描全部
* none:不扫描
* withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象 .apis(RequestHandlerSelectors.withClassAnnotation(Controller.class))
* withMethodAnnotation:扫描方法上的注解 .apis(RequestHandlerSelectors.withMethodAnnotation(RequestMapping.class))*/
.apis(RequestHandlerSelectors.basePackage("com.onlyk.swaggerdome.controller"))
.build();
}
这里能够看的到只还有一个了…
上面注释内容
扫描过滤路径
public Docket getDocket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
/*RequestHandlerSelectors:配置扫描接口的方式
* basePackage:指定扫描的包
* any:扫描全部
* none:不扫描
* withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
* withMethodAnnotation:扫描方法上的注解*/
.apis(RequestHandlerSelectors.basePackage("com.onlyk.swaggerdome.controller"))
/*paths():过滤路径*/
.paths(PathSelectors.ant("/action"))
.build();
}
只扫描action下面的路径。结果就是啥都扫描不到。我就不测试了
是否启动Swagger
public Docket getDocket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
/*.enable(false):是否启用swagger 如果为false,浏览器中不能访问(默认为true)*/
.enable(flag)
.select()
/*RequestHandlerSelectors:配置扫描接口的方式
* basePackage:指定扫描的包
* any:扫描全部
* none:不扫描
* withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
* withMethodAnnotation:扫描方法上的注解*/
.apis(RequestHandlerSelectors.basePackage("com.onlyk.swaggerdome.controller"))
/*paths():过滤路径*/
// .paths(PathSelectors.ant("/action"))
.build();
}
这里有个衍生问题放在下面…
配置项目分组
public Docket getDocket(Environment environment){//获取项目环境需要使用Environment
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("only老K") //swagger信息(ApiInfo)中的name成员变量(不同的开发者信息就需要设置多个ApiInfo在不同的Docket实例中获取)
/*.enable(false):是否启用swagger 如果为false,浏览器中不能访问(默认为true)*/
.select()
/*RequestHandlerSelectors:配置扫描接口的方式
* basePackage:指定扫描的包
* any:扫描全部
* none:不扫描
* withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
* withMethodAnnotation:扫描方法上的注解*/
.apis(RequestHandlerSelectors.basePackage("com.onlyk.swaggerdome.controller"))
/*paths():过滤路径*/
// .paths(PathSelectors.ant("/action"))
.build();
}
这里又有一个衍生问题。也放下面
实体类配置
注解使用
衍生问题
一般的我们只是在项目开发的时候才会去使用到api来进行对接,所以我们怎么在特定的情况下来合理使用Swagger
从上面我们可以知道的是我们可以使用.enable()方法来控制是否使用SWagger
public Docket getDocket(Environment environment){//获取项目环境需要使用Environment
/*设置需要显示的swagger环境*/
Profiles profiles =Profiles.of("dev","test");
/* environment.getActiveProfiles();//获得激活的文件
environment.getDefaultProfiles();//获得默认的文件*/
//通过environment.acceptsProfiles 来判断是否处在自己设定的环境中
boolean flag = environment.acceptsProfiles(profiles);//获取的监听的文件
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("only老K") //swagger信息(ApiInfo)中的name成员变量(不同的开发者信息就需要设置多个ApiInfo在不同的Docket实例中获取)
/*.enable(false):是否启用swagger 如果为false,浏览器中不能访问(默认为true)*/
.enable(flag)
.select()
/*RequestHandlerSelectors:配置扫描接口的方式
* basePackage:指定扫描的包
* any:扫描全部
* none:不扫描
* withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
* withMethodAnnotation:扫描方法上的注解*/
.apis(RequestHandlerSelectors.basePackage("com.onlyk.swaggerdome.controller"))
/*paths():过滤路径*/
// .paths(PathSelectors.ant("/action"))
.build();
}
这里还需要使用到配置文件,不然没有地方获取到环境数据哦
重新启动运行即可
衍生问题2
怎么创建多个分组?每个人的接口都不一样呀!是不可能都放在一个用户下面的哦
在配置文件中配置多个Docket实例
//配置多个Docket实例
@Bean
public Docket getDocket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("King");
}
@Bean
public Docket getDocket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("老K");
}
@Bean
public Docket getDocket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("Only");
}
最后关于注解使用
package com.onlyk.swaggerdome.bean;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
/**
* @author only老K 我为自己代言
* @create 2020-07-05 22:33
* @blogaddress https://blo g.csdn.net/weixin_44255950
*/
@ApiModel("测试实体类 ")
public class Dome {
@ApiModelProperty("用户名")
public String user;
@ApiModelProperty("密码")
public String pwd;
}
package com.onlyk.swaggerdome.controller;
import com.onlyk.swaggerdome.bean.Dome;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.catalina.User;
import org.springframework.stereotype.Controller;
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.ResponseBody;
/**
* @author only老K 我为自己代言
* @create 2020-07-02 19:35
* @blogaddress https://blog.csdn.net/weixin_44255950
*/
@Controller
public class swaggerController {
@RequestMapping("/hello")
@ResponseBody
public String helloSwagger(){
return "hello Swagger";
}
//只要我放回结果中有实体类就会扫描到
@RequestMapping("/dome")
@ResponseBody
public Dome dome(){
return new Dome();
}
//Operation接口
@PostMapping("/test")
@ApiOperation("hello控制类接口 ")
public String hello(@ApiParam("用户名") String name){
return "hello"+name;
}
}
以及可以像PostMan一样的测试(自己弯弯就会了)
end…放在草稿箱有几天了才更新完。还有一个写了更加久的还没有写完呢....