文章目录
1. Swagger2常用注解:
@Api
@Api:用在请求的类上,说明该类的作用
tags=“说明该类的作用”
@Api(tags=“APP用户注册Controller”)
@ApiOperation
@ApiOperation:“用在请求的方法上,说明该方法的作用”
value=“说明方法的作用”
notes=“方法的备注说明”
@ApiOperation(value=“用户注册”, notes=“手机号和密码都是必填项,年龄随便填,但必须是数字”)
@ApiImplicitParams
@ApiImplicitParams:用在请求的方法上,包含一组参数说明,方法有多个形参的时候,可以使用此注解,描述每个参数的作用
@ApiImplicitParam:用在@ApiImplicicParams注解中,指定一个请求参数的配置信息
name:参数名
value:参数的汉字说明,解释
required:参数是否必须传
paramType:参数放在哪个地方
header:–请求参数的获取:@RequestHeader
query:–请求参数的获取:@RequestParam
path(用户restful接口):–请求参数的获取:@PathVariable
body(不常用)
form(不常用)
dataType:参数类型,默认String
defaultValue:参数的默认值
@ApiResponses
@ApiResponses: 用于请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如请求参数没填好
response:抛出异常的类
@ApiModel
@ApiModel:用于响应类上,表示一个返回响应数据的信息(一般用于post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParams注解描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
2. 实际代码使用
创建配置类:
package com.xxxx.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxxx.springboot.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("用户管理接口API参考文档")
.version("1.0")
.build();
}
}
在Controller中加入注释
本文只在UserController类中加入了文档注释,点击超链接可以查看项目代码。
package com.xxxx.springboot.controller;
import com.github.pagehelper.PageInfo;
import com.xxxx.springboot.exceptions.ParamsException;
import com.xxxx.springboot.model.ResultInfo;
import com.xxxx.springboot.query.UserQuery;
import com.xxxx.springboot.service.UserService;
import com.xxxx.springboot.vo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@Api(tags = "用户模块管理")
public class UserController {
@Resource
private UserService userService;
@GetMapping("/user/username/{userName}")
@ApiOperation(value = "用户模块-根据UserName查询用户记录",notes = "可以不加")
@ApiImplicitParam(name = "userName", value = "查询需要的参数,用户名", required = true, paramType = "path")
public User queryUserByUserName(@PathVariable String userName){
return userService.queryUserByUserName(userName);
}
@GetMapping("/user/uid/{userId}")
@ApiOperation(value = "用户模块-根据UserId查询用户记录",notes = "可以不加")
public User queryUserByUserId(@PathVariable Integer userId){
return userService.queryById(userId);
}
@GetMapping("/user/list")
@ApiOperation(value = "用户模块-用户列表查询",notes = "可以不加")
public PageInfo<User> queryUserByParams(UserQuery userQuery){
return userService.queryUsersByParams(userQuery);
}
@PutMapping("/user")
@ApiOperation(value = "用户的添加",notes = "可以不加")
public ResultInfo saveUser(@RequestBody User user){
ResultInfo resultInfo = new ResultInfo();
try {
userService.save(user);
} catch (ParamsException e) {
resultInfo.setCode(e.getCode());
resultInfo.setMsg(e.getMsg());
e.printStackTrace();
}
catch (Exception e){
resultInfo.setMsg("用户添加失败");
resultInfo.setCode(300);
e.printStackTrace();
}
return resultInfo;
}
@PostMapping("/user")
@ApiOperation(value = "用户模块-用户更新",notes = "可以不加")
public ResultInfo updateUser(@RequestBody User user){
ResultInfo resultInfo = new ResultInfo();
try {
userService.update(user);
} catch (ParamsException e) {
resultInfo.setCode(e.getCode());
resultInfo.setMsg(e.getMsg());
e.printStackTrace();
}
catch (Exception e){
resultInfo.setMsg("用户更新失败");
resultInfo.setCode(300);
e.printStackTrace();
}
return resultInfo;
}
@DeleteMapping("/user/{userId}")
@ApiOperation(value = "用户模块-用户删除",notes = "可以不加")
public ResultInfo deleteUser(@PathVariable Integer userId){
ResultInfo resultInfo = new ResultInfo();
try {
userService.delete(userId);
} catch (ParamsException e) {
resultInfo.setCode(e.getCode());
resultInfo.setMsg(e.getMsg());
e.printStackTrace();
}
catch (Exception e){
resultInfo.setMsg("用户删除失败");
resultInfo.setCode(300);
e.printStackTrace();
}
return resultInfo;
}
}
在Model中加入注释
本文只在User类中加入了文档注释,点击超链接可以查看项目代码。
package com.xxxx.springboot.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(description = "用户实体对象")
public class User {
@ApiModelProperty(value = "用户的id,主键")
private Integer id;
@ApiModelProperty(value = "用户的名称")
private String userName;
@ApiModelProperty(value = "用户密码")
private String userPwd;
实际文档效果
默认文档地址为:http://localhost:8080/swagger-ui.html
UserController效果图为:
其中,queryUserByUserName方法详细页面为:
点击try it out 可以实时测试接口