Swagger用于定义API文档,实现前后端开发分离,测试时不再需要浏览器输入URL访问Controller。对于post请求,无需使用postman模拟,在接口文档中填参数,可直接模拟发请求。本文介绍Swagger2的引入及常用注解。
pom.xml中添加依赖
|
|
引入Swagger2
新建类,注解方式引入Swagger2
Controller中添加注解
举例:
示例说明:
1.@ApiOperation:用在方法上,说明方法的作用,再比如:
2.@ApiImplicitParams:用在方法上包含一组参数说明
如:
3.@ApiImplicitParam:用在@ApiImplicitParams注解中,对单个参数进行说明
- name:参数名
- value:参数含义
- required:参数是否必须传
- defaultValue:参数默认值
- dataType:参数类型(对象类型,基本类型要使用包装类)
paramType:参数放在哪个位置
- header–>放在header中,请求参数获取方法:@RequestHeader
- query–>放在url中,请求参数获取方法:@RequestParam
path(用于restful接口)–>请求参数获取方法:@PathVariable,示例如下,重点为{}
123456@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "long", paramType = "path")@RequestMapping(value="/{id}", method=RequestMethod.GET)public User getUser(@PathVariable Long id) {return users.get(id);}body及form不常用
- @ApiResponses:用于表示一组响应
- @ApiResponse:用在@ApiResponses中,表示单个错误响应信息
- code:错误码
- message:错误码含义
- response:抛出异常的类
常用补充:
@Api:用在类上,说明该类的作用
如:123@Api(value= "代理商相关api")public class ProxyController{}@ApiModel:描述一个Model的信息(一般用于post创建时,使用@RequestBody,请求参数无法使用@ApiImplicitParam注解进行描述)
- @ApiModelProperty:描述单个model的属性
@PathVariable: 从url模板取值,注意{};若方法参数名称和绑定的uri template中变量名不一致,需要在@PathVariable(“name”)指定uri template中的名称。
如:1234567@RequestMapping("/user/{id}")public void userInfo(@PathVariable int id) {}@RequestMapping("/user/{id}")public void userInfo(@PathVariable(name="id") int roleId) {}@RequestHeader: 请求header部分的值绑定到方法的参数上
- @CookieValue:Request header中关于cookie的值绑定到方法的参数上
访问api接口文档
输入http://172.16.2.163:8080/swagger-ui.html 访问
路径为swagger-ui.html.
上一步骤中的查询用户是否为代理的示例效果如下:
安全性
api接口文档在内部联调时使用不会有什么问题,正式上线时涉及到安全问题,肯定不可随意访问,后台接口不可暴露。
可采用如下安全方案:
1.将启用Swagger2的注解注释掉。进入页面时,服务器不会将任何接口返回给浏览器,浏览器拿到的是无任何接口的空页面。效果如下:
2.多数情况在上线后仍想访问后台API,则使用拦截器,过滤tokenKey。访问Url如http://172.16.2.163:8080/swagger-ui.html?sdfhiohsdabfnjkawe78oih4342598as