初识Swagger
Swagger 是一个规范和完整的框架,广泛用于生成、描述、调用和可视化 RESTful 风格的 Web服务。总体目标是使客户端和文件系统作为服务器以相同速度更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。通俗一点的来说,就是在项目中加入Swagger的相关配置,就可以生成项目全部接口文档方便前后端开发进行联动。
Swagger的作用
接口文档自动生成。
对接口进行功能测试。
Swagger的组成
Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 文档转换成Swagger 2.0文档等功能。
Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。
Swagger-js: 用于JavaScript的Swagger实现。
Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。
Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。
Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。
如何使用Swagger生成文档
1、进行maven依赖配置
在pom.xml中引入swagger依赖
2、在application中引入swagger类
需要注意的是在apis中需要正确配置需要扫描的接口所在的包的路径即“com.example.demo.controller“”
3、添加swagger注解内容用于controller类上
4、运行项目
贴上简单的代码截图
5、访问swagger-ui得到最终效果
swagger注解的说明
1、@Api:对请求类的说明
@Api:放在请求的类上,与 @Controller 并列 说明类的作用,如该类是用于用户模块、商家模块等。 { tags="说明该类的作用" value="该参数没什么意义,所以不需要配置" }
2、@ApiOperation:方法的说明
@ApiOperation:"用在请求的方法上,说明方法的作用" { value="说明方法的作用" notes="方法的备注说明" }
3、@ApilmplicitParams、@ApilmolicitParam:方法参数的说明
@ApiImplicitParams:用在请求的方法上 包含一组参数说明
@ApiImplicitParams:用在请求的方法上 包含一组参数说明 @ApiImplicitParam:对单个参数的说明 name:参数名 value:参数的说明、描述 required:参数是否必须必填 paramType:参数放在哪个地方 · query --> 请求参数的获取:@RequestParam · header --> 请求参数的获取:@RequestHeader · path(用于restful接口)--> 请求参数的获取:@PathVariable · body(请求体)--> @RequestBody User user · form(普通表单提交) dataType:参数类型,默认String,其它值dataType="Int" //注意这里不能填integer defaultValue:参数的默认值
@ApilmplicitParams、@ApilmolicitParam:方法参数示例
@Api(tags="用户模块") @Controller public class UserController { @ApiOperation(value="用户登录",notes="随边说点啥") @ApiImplicitParams({ @ApiImplicitParam(name="mobile",value="手机号",required=true,paramType="form"), @ApiImplicitParam(name="password",value="密码",required=true,paramType="form"), @ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="Integer") }) @PostMapping("/login") public JsonResult login(@RequestParam String mobile, @RequestParam String password, @RequestParam Integer age){ //... return JsonResult.ok(map); } }
4、@ApiResponses、@ApiResponse:方法返回值的状态码说明
@ApiResponses:方法返回对象的说明 @ApiResponse:每个参数的说明 code:数字,例如400 message:信息,例如"请求参数没填好" response:抛出异常的类
@ApiResponses、@ApiResponse:方法返回值的示例
@Api(tags="用户模块") @Controller public class UserController { @ApiOperation("获取用户信息") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name="userId", dataType="String", required=true, value="用户Id") }) @ApiResponses({ @ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对") }) @ResponseBody @RequestMapping("/list") public JsonResult list(@RequestParam String userId) { ... return JsonResult.ok().put("page", pageUtil); } }
5、@ApiModel:用于JavaBean上面,表示对JavaBean 的功能描述
@ApiModel的功能:
1、当请求数据描述,即 @RequestBody 时, 用于封装请求(包括数据的各种校验)数据;
2、当响应值是对象时,即 @ResponseBody 时,用于返回值对象的描述。
当请求数据描述时, @RequestBody 时的使用
@ApiModel(description = "用户登录") public class UserLoginVO implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "用户名",required=true) private String username; @ApiModelProperty(value = "密码",required=true) private String password; // getter/setter省略 }
@Api(tags="用户模块") @Controller public class UserController { @ApiOperation(value = "用户登录", notes = "") @PostMapping(value = "/login") public R login(@RequestBody UserLoginVO userLoginVO) { User user=userSerivce.login(userLoginVO); return R.okData(user); } }
@ApiModelProperty:用在JavaBean类的属性上面,说明属性的含义
@ApiModel(description= "返回响应数据") public class RestMessage implements Serializable{ @ApiModelProperty(value = "是否成功",required=true) private boolean success=true; @ApiModelProperty(value = "错误码") private Integer errCode; @ApiModelProperty(value = "提示信息") private String message; @ApiModelProperty(value = "数据") private Object data; /* getter/setter 略*/ }
借鉴大佬的帖子:
https://blog.csdn.net/xiaojin21cen/article/details/78654652?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162860182416780366580688%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162860182416780366580688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-78654652.first_rank_v2_pc_rank_v29&utm_term=swagger%E6%B3%A8%E8%A7%A3&spm=1018.2226.3001.4187