Swagger的扫描接口
导入swagger依赖
<!--引入swagger-->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
启动项目后,直接进入
http://localhost:8081/swagger-ui.html在你的端口号后加入swagger-ui.html就进入swagger界面
我们先创建一个配置类,在类上配置两个注解
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
然后我们就创建Swagger的Doucket实例
//配置swagger的bean实例
@Bean
public Docket docket(){
一定不要忘记加@Bean注解,不加的话就没有作用
//Docket的参数点进Docket源码中,我们重写的是这个方法,所以我们也要传入这个参数
//DocumentationType.SWAGGER_2参数的很多的值可以配置
return new Docket(DocumentationType.SWAGGER_2)
Swagger也是一种链式编程我们可以点进Docket的源码,我们可以看到它有许多的方法,以及方法的返回类型
private ApiInfo apiInfo = ApiInfo.DEFAULT;
private String groupName = DEFAULT_GROUP_NAME;
private boolean enabled = true;
private GenericTypeNamingStrategy genericsNamingStrategy = new DefaultGenericTypeNamingStrategy();
private boolean applyDefaultResponseMessages = true;
private String host = "";
private Optional<String> pathMapping = Optional.absent();
private ApiSelector apiSelector = ApiSelector.DEFAULT;
private boolean enableUrlTemplating = false;
private List<VendorExtension> vendorExtensions = newArrayList();
配置Swagger信息
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
这里面是需要传入一个ApiInfo 为返回值得名叫apiInfo的方法
//配置swagger信息的类,通过DocumentationType.SWAGGER_2.apiInfo调用这个方法
//这些配置的大部分是没有什么用的,都是用来显示的,但是就算没用我们也要赔,因为我们点进去ApiInfo这个方法
//我们就会发现它没有set方法,只有get方法,所以就算没用只是用来显示,我们也要将其配置好,就算是乱输入,也要输入
//不然你们懂的
public ApiInfo apiInfo(){
Contact contact = new Contact("蒋锦华", "https://i.csdn.net/#/uc/profile", "1234567890@qq.com");
return new ApiInfo("蒋锦华的swagger日志",
"你尽管努力,其他的交给天意",
"1.0",
"https://i.csdn.net/#/uc/profile",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
这就是配置swagger的显示信息,这里就是显示信息
然后我们就是查看这里,我们需要配置我们的扫描接口
@RestController
public class HelloController {
@GetMapping(value = ("hello"))
public String hello(){
return "hello";
}
//只要方法返回值中有实体类,那么swagger界面就会有model
//接口注释,只能放在方法上,不能放在类上
// @ApiOperation("蒋锦华的实体类")
@PostMapping(value = ("hello1"))
public User User(User user){
return user;
}
}
以上是我的接口内容
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors扫描方式
//basePackage扫描包
//any全部扫描
//none全部不扫描
//withClassAnnotation扫描class的注解 ,参数是一个注解的反射对象 如 RestController.class
//withMethodAnnotation扫描方法上的注解 如 GetMapper.class
.apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
//paths过滤路径
//ant设置过滤的路径
//.paths(PathSelectors.ant("kuang/**"))
.build();
以上是我配置的扫描接口,我里有很多的注解,应该都看得懂吧
配置好过后就运行扫描,然后我们的接口就会扫描出来,以上
下面我们就将开关,其实也就一个
//enable开启 是否启用swagger true启动 false不启动
.enable(enable)
还有大家需要注意的是,它们的级别,enable和select级别是一样的,所以你在select下是没有enable的。
还有将生产环境和发布环境分开,在生产环境是打开swagger,发布的时候不需要swagger,这个我会弄一个专门的一张,把我的理解写上去
大部分的配置就是这样,还有的就是api文档的分组,因为开发一个项目,每个人都有自己的swagger,到时候合在一起是不可能的,只能通过分组,你的组是显示的你的api,他的组是显示的他的api
所有就要多些几个Docket
//配置swagger的bean实例
@Bean
public Docket docket(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
//配置API文档分组 想要配置多个组的话就需要多创建Docket实例
// @Bean
// public Docket docket1(){
// return new Docket(DocumentationType.SWAGGER_2).groupName("蒋锦华2");
// } 即可多一个分组
.groupName("蒋锦华")
//enable开启 是否启用swagger true启动 false不启动
.enable(true)
.select()
//RequestHandlerSelectors扫描方式
//basePackage扫描包
//any全部扫描
//none全部不扫描
//withClassAnnotation扫描class的注解 ,参数是一个注解的反射对象 如 RestController.class
//withMethodAnnotation扫描方法上的注解 如 GetMapper.class
.apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
//paths过滤路径
//ant设置过滤的路径
//.paths(PathSelectors.ant("kuang/**"))
.build();
}
多些几个Docket就好分组的名称就是.groupName(“输入名称”)
还有就是配置注释,端口多了你记得住,别人记不住,不知道是什么,所以我们就需要注释一下
//这边注释过后Swagger那里的model也会有注释,利于前端辨认
// ApiModel注释的是类
@ApiModel("用户实体类")
public class User {
//@ApiModelProperty注释的是字段名
@ApiModelProperty("用户名")
private String name;
@ApiModelProperty("密码")
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
@RestController
public class HelloController {
@GetMapping(value = ("hello"))
public String hello(){
return "hello";
}
//只要方法返回值中有实体类,那么swagger界面就会有model
//接口注释,只能放在方法上,不能放在类上
@ApiOperation("蒋锦华的实体类")
@PostMapping(value = ("hello1"))
public User User(){
return new User();
}
}
而我们的model呢就是我们接口给我们返回的实体类,只有接口的返回值中有实体类,swagger才会有model
就可以很清楚的识别,这些就是我的理解
写的不好还见谅,把博客当笔记用0.0