参考:
knife4j官网:https://doc.xiaominfo.com/guide/useful.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80
swagger官网:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X#quick-annotation-overview
https://blog.csdn.net/github_38823514/article/details/88970607
swagger-bootstrap-ui默认访问地址是:http://${host}:${port}/doc.html
使用步骤
1.导依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
2.配置
@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfig {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
*/
@Bean
public Docket defaultApi2() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.bestser.jewellery.inventory.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("进销存api文档")
.description("进销存api文档,根据java代码自动生成")
.version("v1.0")
.build();
}
}
3.常用注解
@Api:用在类上,说明该类的作用。
@ApiOperation:注解来给API增加方法说明。
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明。
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)
注意:@ApiImplicitParam的参数说明:
示例:
/**
* 一个用来测试swagger注解的控制器
* 注意@ApiImplicitParam的使用会影响程序运行,如果使用不当可能造成控制器收不到消息
*
* @author SUNF
*/
@Controller
@RequestMapping("/say")
@Api(value = "SayController|一个用来测试swagger注解的控制器")
public class SayController {
@ResponseBody
@RequestMapping(value ="/getUserName", method= RequestMethod.GET)
@ApiOperation(value="根据用户编号获取用户姓名", notes="test: 仅1和2有正确返回")
@ApiImplicitParam(paramType="query", name = "userNumber", value = "用户编号", required = true, dataType = "Integer")
public String getUserName(@RequestParam Integer userNumber){
if(userNumber == 1){
return "张三丰";
}
else if(userNumber == 2){
return "慕容复";
}
else{
return "未知";
}
}
@ResponseBody
@RequestMapping("/updatePassword")
@ApiOperation(value="修改用户密码", notes="根据用户id修改密码")
@ApiImplicitParams({
@ApiImplicitParam(paramType="query", name = "userId", value = "用户ID", required = true, dataType = "Integer"),
@ApiImplicitParam(paramType="query", name = "password", value = "旧密码", required = true, dataType = "String"),
@ApiImplicitParam(paramType="query", name = "newPassword", value = "新密码", required = true, dataType = "String")
})
public String updatePassword(@RequestParam(value="userId") Integer userId, @RequestParam(value="password") String password,
@RequestParam(value="newPassword") String newPassword){
if(userId <= 0 || userId > 2){
return "未知的用户";
}
if(StringUtils.isEmpty(password) || StringUtils.isEmpty(newPassword)){
return "密码不能为空";
}
if(password.equals(newPassword)){
return "新旧密码不能相同";
}
return "密码修改成功!";
}
}
示例;
/**
* @author hubert
* @date 2020-06-02
*/
@RestController
@RequestMapping(value = "/product")
@Api(tags = "货品")
public class ProductController {
private ProductService productService;
public ProductController(ProductService productService) {
this.productService = productService;
}
@ApiOperation(value = "获取产品分类详情")
@GetMapping(value = "/category/{id}")
public ProductCategoryDO getCategory(@PathVariable Integer id) {
return productService.getProductCategoryById(id)
.orElse(new ProductCategoryDO());
}
...
}