参考:
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@EnableKnife4jpublic class SwaggerConfig {/*** 创建API应用* apiInfo() 增加API相关信息* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,* 本例采用指定扫描的包路径来定义指定要建立API的目录。*/@Beanpublic 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());}...}

