一.什么是Swagger
官网:https://swagger.io/
swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RestFul风格的web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
Swagger是一组开源项目,其中主要要项目如下:
(1)Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。
(2)Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。
(3)Swagger-js: 用于JavaScript的Swagger实现。
(4)Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。
(5)Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。
(6)Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。
二.SpringCloud集成Swagger
1.心间项目,导入Swagger依赖
<!-- SpringBoot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--swagger依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2.编写Swagger的配置文件
注意:SwaggerConfig可以指定根据注解或者包名扫描具体的API
@Configuration
@EnableSwagger2
public class Swagger2Config {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 指定扫描的包路径来定义指定要建立API的目录。
* @return
*/
@Bean
public Docket coreApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(adminApiInfo())
.groupName("adminApi")
.select()
//只显示admin下面的路径
.paths(Predicates.and(PathSelectors.regex("/admin/.*")))
.build();
}
private ApiInfo adminApiInfo(){
return new ApiInfoBuilder()
.title("尚融宝后台管理系统--api文档")
.description("尚融宝后台管理系统接口描述")
.version("1.0")
.contact(new Contact("李燕茹","http://baidu.com","728831102@qq.com"))
.build();
}
}
3.认识自定义注解
(1)@Api:用在类上,说明该类的作用。
(2)@ApiOperation:注解来给API增加方法说明。
(3)@ApiParam:定义在参数上
(4)@ApiResponses:用于表示一组响应
(5)@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
(6)@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)
(7)@ApiModelProperty:描述一个model的属性
(8)@ApiImplicitParams: 用在方法上包含一组参数说明。
(9)@ApiImplicitParam:用来注解来给方法入参增加说明。
4.添加注解的过程
(1)在控制层Controller中添加注解来描述接口信息如:
@Api("参数配置")
@Controller
@RequestMapping("/system/config")
public class ConfigController
(2)在方法中配置接口的标题信息
@ApiOperation("查询参数列表")
@ResponseBody
public TableDataInfo list(Config config)
{
startPage();
List<Config> list = configService.selectConfigList(config);
return getDataTable(list);
}
5.注解使用案例
(1)实体类
(1)@ApiModel(value=“IntegralGrade对象”, description=“积分等级表”)
(2)@ApiModelProperty(value = “编号”)
//实体类
//entity的实体类中可以添加一些自定义设置
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="IntegralGrade对象", description="积分等级表")
public class IntegralGrade implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "编号")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "积分区间开始")
private Integer integralStart;
@ApiModelProperty(value = "积分区间结束")
private Integer integralEnd;
@ApiModelProperty(value = "借款额度")
private BigDecimal borrowAmount;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
@ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)")
@TableField("is_deleted")
@TableLogic
private Boolean deleted;
}
(2)Controller层
(1)@Api(value = “积分等级管理”)
加在类上
(2)@ApiOperation(value = “根据id删除积分等级”,notes = “逻辑删除”)
加在方法上
(3)@ApiParam(value = “数据id”,required = true,example = “1”)
加在方法参数上
//controler层
@RestController
@RequestMapping("/admin/integralGrade")
@Api(value = "积分等级管理")
public class IntegralGradeController {
@Resource
private IntegralGradeService integralGradeService;
@GetMapping("/list")
@ApiOperation("积分等级列表")
public Result listAll(){
List<IntegralGrade> list = integralGradeService.list();
return Result.ok().data("list",list);
}
@DeleteMapping("/remove/{id}")
@ApiOperation(value = "根据id删除积分等级",notes = "逻辑删除")
public Result removeById(
@ApiParam(value = "数据id",required = true,example = "1")
@PathVariable Long id){
boolean result = integralGradeService.removeById(id);
if (result){
return Result.ok().message("删除成功");
}else {
return Result.error().message("删除失败");
}
}
@PostMapping("/save")
@ApiOperation(value = "新增积分等级")
public Result save(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
boolean result = integralGradeService.save(integralGrade);
if (result){
return Result.ok().message("新增成功");
}else {
return Result.error().message("新增失败");
}
}
@PutMapping("/updateById")
@ApiOperation(value = "根据id修改积分等级")
public Result updateById(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
boolean result = integralGradeService.updateById(integralGrade);
if (result){
return Result.ok().message("修改成功");
}else {
return Result.error().message("修改失败");
}
}
@GetMapping("/getById/{id}")
@ApiOperation(value = "根据id查询积分等级")
public Result getById(@ApiParam(value = "数据id",required = true,example = "1") @PathVariable Long id){
IntegralGrade result = integralGradeService.getById(id);
if (result == null){
return Result.error().message("查询失败");
}else {
return Result.ok().data("integralGrade",result);
}
}
}
6.页面访问效果
完成上述代码,启动程序,访问:http://localhost:8080/swagger-ui.html
7.进行功能测试
点击try it out 可以测试接口
有一个需要注意的地方:Conntroller中定义的方法必须在@RequestMapper中显示的指定RequestMethod类型,否则SawggerUi会默认为全类型皆可访问, API列表中会生成7条项目。
三.拓展
1.Swagger的启用和禁用
可通过application.yml中的swagger.enable控制。为true时表示启用,为false时表示禁用。
为了系统安全,通常生产环境不建议开启swagger。
2.如何汉化系统接口Swagger
(1)找到m2/repository/io/springfox/springfox-swagger-ui/x.x.x/springfox-swagger-ui-x.x.x.jar
(2)修改对应springfox-swagger-ui-x.x.x.jar包内resources目录下swagger-ui.html,添加如下JS代码
<!-- 选择中文版 -->
<script src='webjars/springfox-swagger-ui/lang/translator.js' type='text/javascript'></script>
<script src='webjars/springfox-swagger-ui/lang/zh-cn.js' type='text/javascript'></script>
(3)本地修改结束后,在覆盖压缩包文件重启就实现汉化了
标签:JAVA,SpringCloud,value,public,Result,return,Swagger,id From: https://blog.csdn.net/weixin_66834439/article/details/144238536