前后端分离开发,后端需要编写接?说明?档,会耗费?较多的时间。
swagger 是?个?于?成服务器接?的规范性?档,并且能够对接?进?测试的?具。
作用
- ?成接?说明?档
- 对接?进?测试
使用步骤
-
添加依赖
<!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
-
写配置类
SwaggerConfig
/** * SwaggerConfig 接口文档配置类 */ @Configuration @EnableSwagger2 public class SwaggerConfig { /** * 配置接口文档生成规则 */ @Bean public Docket getDocket() { // 设置文档生成规则 return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) // 设置文档信息 .select() // 设置哪个包下的类需要生成文档 .apis(RequestHandlerSelectors.basePackage("com.luis.fmmall.controller")) .paths(PathSelectors.any()) // 定义哪些路径的接口需要生成文档 .build(); } /** * 设置文档信息 */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("xxx接口文档") .description("这里是相关描述") .version("1.0") .contact(new Contact("luis", "https://www.cnblogs.com/luisblog", "xxx@qq.com")) .build(); } }
-
在控制器类上使用 Swagger 的注解进行相关说明
示例如下:
@RestController @RequestMapping("/user") @Api(tags = "用户管理", value = "提供用户的登陆、注册、修改等功能") //类说明 public class UserController { @Resource private UserService userService; @GetMapping("/login") @ApiOperation(value = "登陆验证", notes = "用户登陆检查") //方法名说明 @ApiImplicitParams({ //参数说明 @ApiImplicitParam(dataType = "string", name = "username", value = "用户名", required = true), @ApiImplicitParam(dataType = "string", name = "password", value = "用户密码", required = false, defaultValue = "123") }) public ResultVo login(@RequestParam("username") String name, @RequestParam(value = "password", defaultValue = "123") String pwd) { return userService.checkLogin(name, pwd); } }
-
启动 SpringBoot 应用,访问
http://localhost:8080/swagger-ui.html
效果如下:
常用注解说明
-
@Api
:类注解,使用在控制器类上,对类进行说明控制器类 UserController 示例:
@Api(tags = "用户管理", value = "提供用户的登陆、注册、修改等功能") //类说明 public class UserController { }
-
@ApiOperation
:方法注解,使用在方法上,对方法名进行说明 -
@ApiImplicitParam
和@ApiImplicitParams
:方法注解,使用在方法上,对方法的形参进行说明单个形参使用
@ApiImplicitParam
,多个形参使用@ApiImplicitParams
控制器类 UserController 的 login 方法示例:
@GetMapping("/login") @ApiOperation(value = "登陆验证", notes = "用户登陆检查") //方法名说明 @ApiImplicitParams({ //参数说明 @ApiImplicitParam(dataType = "string", name = "username", value = "用户名", required = true), @ApiImplicitParam(dataType = "string", name = "password", value = "用户密码", required = false, defaultValue = "123") }) public ResultVo login(@RequestParam("username") String name, @RequestParam(value = "password", defaultValue = "123") String pwd) { return userService.checkLogin(name, pwd); }
-
@ApiModel
和@ApiModelProperty
:当接?的形参或返回值为对象类型时,在实体类中添加此注解说明接口的返回值为 ResultVo 对象示例:
@Da