简介:
Swagger是一款简单并且功能强大的API表达工具。我们可以通过Swagger生成的API得到接口的交互式文档。
例如:没用swagger3之前,一般用postman来测试接口,并且出一份接口详细文档给到前端 这是很麻烦的事。但是现在Swagger3能帮我们很好的解决测试接口和接口文档这些事。
swagger官网
swagger在线编辑器
第一步:
springboot 框架导入swagger依赖Maven
io.springfox
springfox-boot-starter
3.0.0
注释:这里用的是 springfox,Swagger 可以看作是一个遵循了 OpenAPI 规范的一项技术,而 springfox 则 是这项技术的具体实现。
类似JDBC的一套技术规范,各大数据库都有JDBC的技术实现。
第二步:
在 Spring Boot 的启动类添加 @EnableOpenApi 注解,开启 Swagger支持;
@EnableOpenApi
@SpringBootApplication
public class SwaggerTestApplication {
public static void main(String[] args) {
SpringApplication.run(SwaggerTestApplication.class, args);
}
}
第三步:
@RestController
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(){
return "helloWorld";
}
}
启动项目 浏览器访问:http://localhost:8080/swagger-ui/
第四步:注释接口
@Api(tags="helloWorld类测试")
@RestController
public class HelloWorldController {
@ApiOperation("测试方法")
@RequestMapping("/helloWorld")
public String helloWorld(){
return "helloWorld";
}
}
@Api :用在请求的类上,表示对类的说明tags="说明该类的作用,可以在 UI 界面上看到的注解 "value="该参数没什么意义,在 UI 界面上也看到,所以不需要配置 "@ApiOperation :用在请求的方法上,说明方法的用途、作用value="说明方法的用途、作用 "notes="方法的备注说明 "@ApiImplicitParams :用在请求的方法上,表示一组参数说明@ApiImplicitParam:用在@ApiImplicitParams 注解中,指定一个请求参数的各个方面name:参数名value:参数的汉字说明、解释required:参数是否必须传paramType:参数放在哪个地方· header --> 请求参数的获取:@RequestHeader· query --> 请求参数的获取:@RequestParam· path(用于restful接口) --> 请求参数的获取: @PathVariable· div(不常用)· form(不常用)dataType:参数类型,默认 String ,其它值 dataType="Integer"defaultValue:参数的默认值@ApiResponses :用在请求的方法上,表示一组响应@ApiResponse:用在 @ApiResponses 中,一般用于表达一个错误的响应信息code:数字,例如400message:信息,例如" 请求参数没填好 "response:抛出异常的类@ApiModel :用于响应类上,表示一个返回响应数据的信息(这种一般用在post 创建的时候,使用 @RequestBody 这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)@ApiModelProperty :用在属性上,描述响应类的属性
/**
* 查询
* @param name
* @param age
* @return
*/
@PostMapping("/search")
@ApiImplicitParams({
@ApiImplicitParam(name = "name",value = "姓名",required = true,paramType
= "query"),
@ApiImplicitParam(name = "age",value = "年龄",required = true,paramType =
"query",dataType = "Integer")
})
@ApiOperation("测试查询")
public String search(String name,Integer age){
return name+":"+age;
}
//第二种
@ApiOperation(value = "接口信息", notes = "接口其他描述")
@ResponseBody
@RequestMapping(value="/search",method = RequestMethod.GET)
public MessageResult addTastType(@SessionAttribute(SESSION_MEMBER) AuthMember user,
@ApiParam("每日任务种类名字")@RequestParam(name = "name")String name,
@ApiParam("任务条件描述")@RequestParam(name = "description",required = false,defaultValue = "默认值")String description,
@ApiParam("1:上架 0:下架")@RequestParam(name = "putOff")Integer putOff) {
return success();
}
@SuppressWarnings("serial")
@Data
@ApiModel("行业")
public class Industry extends Model {
@TableId(value="id",type= IdType.AUTO)
private Integer id;
@ApiModelProperty("行业名称")
private String name;
@ApiModelProperty("1存在 0删除")
private Integer isDelete;
@ApiModelProperty("1上架 2下架")
private Integer status;
@ApiModelProperty("父类id")
private Integer parentId;
private Date createTime;
private Date updateTime;
}
@PostMapping("/add")
@ApiOperation("测试添加")
public String add(ndustry industry ){
return null;
}
@ApiResponses , @ApiResponse ,描述响应码对应的描述信息
@GetMapping("/user/{id}")
@ApiOperation("根据ID获取用户信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id",value = "用户编号",required = true,paramType
= "path")
})
@ApiResponses({
@ApiResponse(code=408,message="指定业务得报错信息,返回客户端"),
@ApiResponse(code=400,message="请求参数没填好"),
@ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
})
public User load(@PathVariable("id") Integer id){
return new User(id,"jack",32);
}
可以通过新建一个配置类重写 ApiInfo 实现,以及重写 Docket 实现并且设置apiInfo;
@Configuration
public class SwaggerApp {
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.apiInfo(createApiInfo());
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("Spring Boot 使用 Swagger2 构建RESTful API")
//创建人
.contact(new Contact("Bryan", "http://blog.blockchan.com/", ""))
//版本号
.version("1.0")
//描述
.description("API 描述")
.build();
}
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.enable(false) // 开关
.apiInfo(apiInfo());
}
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.enable(true) // 开关
.select()
.apis(RequestHandlerSelectors.basePackage("com.test.controller")) // 指定扫描的包 常用方式
.build()
.apiInfo(apiInfo());
}
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.enable(true) // 开关
.select()
.paths(PathSelectors.ant("/test/**")) // 匹配 /test/**请求路径
.build()
.apiInfo(apiInfo());
}
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.groupName("开发组001")
.enable(true) // 开关
.select()
.build()
.apiInfo(apiInfo());
}
模拟分组:
@Configuration
public class SwaggerApp {
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.groupName("开发组001")
.select()
.apis(RequestHandlerSelectors.basePackage("com.test.controller.one")) // 指定扫描的包 常用方式
.build()
.apiInfo(apiInfo());
}
/**
* 配置swagger的Docket bean
* @return
*/
@Bean
public Docket createRestApi2() {
return new Docket(DocumentationType.OAS_30) // 指定swagger3.0版本
.groupName("开发组002")
.select()
.apis(RequestHandlerSelectors.basePackage("com.test.controller.two")) // 指定扫描的包 常用方式
.build()
.apiInfo(apiInfo2());
}
/**
* 配置swagger的ApiInfo bean
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("Spring Boot 使用 Swagger2 构建RESTful API")
//创建人
.contact(new Contact("开发人名1", "http://blog.blockchan.com/", "联系邮箱"))
//版本号
.version("1.0")
//描述
.description("API 描述")
.build();
}
/**
* 配置swagger的ApiInfo bean
* @return
*/
@Bean
private ApiInfo apiInfo2() {
return new ApiInfoBuilder()
//页面标题
.title("Spring Boot 使用 Swagger2 构建RESTful API")
//创建人
.contact(new Contact("开发人名2", "http://blog.blockchan.com/", "联系邮箱"))
//版本号
.version("1.0")
//描述
.description("API 描述")
.build();
}
}