添加pom.xml依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
配置application.yml
#springboot版本搞需要配置它
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
#-dev.yml
server:
port: 8081
#Swagger
#到时候在config类里定义
#@Value("${swagger.enabled}")//获取当前环境ymlswagger.enabled的值付给flag1
# boolean flag1; 选择是否开启swagger
swagger:
enabled: true
#-prod.yml
server:
port: 8082
#Swagger lock
swagger:
enabled: false
config文件
@Configuration
//@EnableSwagger2//开启 Swagger2 网站swagger-ui/index.html
@EnableOpenApi//开启 Swagger
/*
Swagger的bean实例Docket
*/
//@Profile({"dev","test"}) //判断是否是在dev ,test环境下 ,是开启 Swagger 不需要.enable() 在dev所以下面的类
public class SwaggerCnofig {
//.enable()配置是否启动swagger false不启动,不能在浏览器访问。默认true
@Value("${swagger.enabled}")//获取当前环境ymlswagger.enabled的值付给flag1
boolean flag1;
//多个Docket 配置多个分组 自己的组配置自己的信息
@Bean
public Docket docket2(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("A2");
}
@Bean
public Docket docket3(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("B3");
}
@Bean
public Docket docket4(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("C4");
}
//配置swagger的docketd的bean实例
@Bean
public Docket docket(Environment environment){
//获取项目环境 判断是否开启swagger
//设置要显示的swagger环境 监听dev,test环境
Profiles profiles=Profiles.of("dev","test");
//获得一个激活的文件getActiveProfiles
//监听一个对象getDefaultProfiles
//?3.0版不用再docket中设置,properties中设置了profile就可以了
//2.x版用environment.acceptsProfiles这个判断是否处在自己设定的环境当中
//Boolean b=environment.acceptsProfiles(环境监听变量)
Boolean flag=environment.acceptsProfiles(profiles);
//environment.getDefaultProfiles();
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())//这个是下面我们自己写的
.groupName("hello,zll!")
.enable(flag1)//配置是否启动swagger false不启动,不能在浏览器访问。默认true
.select() //select().apis .build();这是一套
//RequestHandlerSelectors配置要扫描接口的方式
// basePackage基于某个包去扫描("com.zll.swagger.controller")
//any()扫描全部
//none()不扫描
//withClassAnnotation()扫描类上的注解 参数是一个注解的反射对象(getMapping.class)
//withMethodAnnotation()扫描方法上的注解(GetMapping.class)
//withClassAnnotation(RestController.class)只会去扫描类上有RestController这样的类来生成接口
.apis(RequestHandlerSelectors.basePackage("com.zll.swagger.controller"))
//paths()过滤什么路径 ant路径 差不多是过滤除这以外的
//.paths(PathSelectors.ant("/zll/**"))//只扫描带有zll下的接口请求
.build();
}
//配置swagger信息=》需要apiInfo类
private ApiInfo apiInfo(){
//作者信息
Contact DEFAULT_CONTACT = new Contact("今珂", "http://baidu,com ","1664086110@qq.com");
//标签
return new ApiInfo("今珂 的Api Swagger文档",
"描述:hello,今珂!!!",
"版本:1.0", "http://baidu,com",
DEFAULT_CONTACT, "Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
控制类controller
@Api(tags="注释:Hello控制类",description = "描述")//tags可以多个值 tags = {"列表1","列表2"}
@RestController
public class HelloController {
@PostMapping(value="/hello")//@RequestMapping=》get post都可以使用
public String hello(){
return "zll,hello!";
}
//只要我们的接口中,返回值中存在实体类,他就会被扫描到
@GetMapping(value="/user")//@RequestMapping=》get post都可以使用
public User user(){
return new User();
}
@ApiOperation("接口:Hello2方法")//是用在方法上的
@GetMapping("/hello2")
public String hello2(@ApiParam("用户名") String username){
String zll;
return "hello"+username;
}
@ApiOperation("接口:Post测试类")//是用在方法上的
@PostMapping("/postt")
public User postt(@ApiParam("User类") User user){ //使用User实体类需要成员为private 否则报错=》Unable to scan documentation context 组名
// int i=5/0;//除0 swagger页面测试接口会报500错误
return user;
}
}
实体类
//需要去Controller中设置接口才可以让swagger扫描
@Data//get set方法
@ApiModel("@ApiModel文档注释:用户实体类 User")//使用在类上,表示对类进行说明 -description=( 描述)
public class User {
@ApiModelProperty("使用在方法,字段上注释:用户名")
/*
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
*/
private String name; //public不需要get set方法就可以扫描到
@ApiModelProperty(value = "密码")
private String password; //private 需要加get set方法才可以被扫描到
/*@ApiParam()去控制类的接口方法里的参数字段注释
使用在方法上或者参数上,字段说明;表示对参数的添加元数据(说明或是否必填等)
name–参数名
value–参数说明
required–是否必填
*/
/*
@ApiOperation() 去控制类的接口方法上注释
使用于在方法上,表示一个http请求的操作
源码中属性太多,记几个比较常用
value用于方法描述
notes用于提示内容
tags可以重新分组(视情况而用)
*/
}