spring boot整合Swagger2
首先导入依赖
<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>
编写配置类
一定要加一下两个注解:
@Configuration :声明该类为配置类
@EnableSwagger2 :开启Swagger2
@Slf4j
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
log.info("进入到swagger的配置中");
return new Docket(DocumentationType.SWAGGER_2)
// 指定构建api文档的详细信息的方法:apiInfo()
.apiInfo(getApiInfo())
.select()
// 指定要生成api接口的包路径,这里把controller作为包路径,生成controller中的所有接口
.apis(RequestHandlerSelectors.basePackage("要生成接口文档的controller包的路径例如:com.pn.controller"))
//配置路径
.paths(PathSelectors.any())
.build();
//忽略参数
//.ignoredParameterTypes(HttpServletRequest.class);
}
public ApiInfo getApiInfo() {
return new ApiInfoBuilder()
//文档标题
.title("这是阳光书亦操作信息接口文档说明")
//文档描述
.description("可以实现添加投诉信息,指定查询,查询所有,修改举报信息等")
//项目路径
.termsOfServiceUrl("http://127.0.0.1:8080/")
//负责人
.license("zxy")
//版本
.version("1")
.build();
}
}
注意 :.ignoredParameterTypes()要写在build()后面不然会报错
准备实体类
/**
* <p>
* 用户主数据
* </p>
*
* @author zxy
* @since 2022-04-13
*/
@Data
@ApiModel(value = "用户数据")
public class User implements Serializable {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "用户Id")
private Integer id;
/**
* 用户
*/
@ApiModelProperty(value = "用户")
private String UserName;
/**
* 用户联系方式
*/
@ApiModelProperty(value = "用户联系方式")
private String Phone;
}
准备controller
/**
* <p>
* 用户主数据 前端控制器
* </p>
*
* @author zxy
* @since 2022-04-13
*/
@RestController
@RequestMapping("/User")
@Api(tags = "用户数据记录")
public class SunshineReportController {
@Autowired
private UserService userService ;
/**
* 新增用户记录
* @param req
* @return
*/
@PostMapping("/add")
@ApiOperation(value = "添加用户",notes = "添加用户")
public JSONObject addUser(@RequestBody User user){
return userService.addUser(user);
}
/**
* 根据id查询用户详细信息
* @param id
* @return
*/
@GetMapping("/selectUserById")
//@RequestMapping(value = "/selectById/{id}",method = GET.GET)
@ApiOperation(value = "根据Id查询详细信息",notes = "根据Id查询详细信息")
@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "需要查询详情的用户id",required = true,dataType = "int", example = "1")})
public JSONObject selectUserById(@RequestParam("id") Integer id){
return UserService.getById(id);
}
/**
* 用户列表
* @param req
* @return
*/
@GetMapping("/list")
@ApiOperation(value = "查询所有投诉信息(分页查询)",notes = "查询所有(默认第一页,10条),分页查询,pageSize(每页条数),pageNo(当前页)")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true,dataType = "int",example = "10",paramType = "query"),
@ApiImplicitParam(name = "pageNo", value = "当前页", required = true,dataType = "int",example = "1",paramType = "query")})
public JSONObject list(HttpServletRequest req ){
System.out.println("req = " + req);
return UserService.list(req);
}
@ApiResponses({
@ApiResponse(code=200,message="删除成功"),
@ApiResponse(code=500,message="删除失败")})
@ApiOperation(value = "删除用户",notes = "根据id删除用户")
@DeleteMapping("/user/delete/{id}")
public Integer deleteUserById(@PathVariable Integer id) {
return UserService.deleteUserById(id);
}
}
测试
访问http://localhost:8080/swagger-ui.html即可。
注意上图:
req你参数的名称
小括号那里代表了你的参数的类型(这里一定要注意哦!!!)
以下是注解说明
Swagger注解说明:
@Api:用在Controller类上,说明该类的作用。
@ApiOperation:注解来给API增加方法说明。
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明,包含在注解@ApiImplicitParams中。
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:描述一个model的属性
@ApiImplicitParam 各个参数说明:
1. name :参数名。
2. value : 参数的具体意义,作用。
3. required : 参数是否必填。
4. dataType :参数的数据类型,默认String,Integer类型需要写成“int”,添加参数默认值
5. defaultValue :参数的默认值
6. paramType :查询参数类型,这里有几种形式:
path 以地址的形式提交数据
query 直接跟参数完成自动映射赋值
body 以流的形式提交 仅支持POST
header 参数在request headers 里边提交
form 以form表单的形式提交 仅支持POST
注意:
2. 参数的id之类的为Integer,dataType 则需要写成Int,并且需要添加属性example(默认值);
3. 最后是关于接口接收参数为HttpServletRequest 配置参数,可以配你业务中需要的参数名称和类型,主要是查询参数类型,是你业务要使用的数据用什么方式提交。