SpringBoot整合Swagger3.x 丝袜哥+常用注解
-
-
简介:在java代码里面增加注解生成接口文档
- 在代码里面增加注解
RestController @RequestMapping("api/v1/user") @Api(tags = "用户模块",value = "用户UserController") public class UserController { @Autowired private BannerService bannerService; @ApiOperation("分页用户列表") @GetMapping("list") public JsonData list(){ List<BannerDO> list = bannerService.list(); return JsonData.buildSuccess(list); } } -
优点
- 支持SpringMVC、SpringBoot、SpringCloud等主流java框架
- 对java代码友好
- 界面简洁
- 国内比较活跃,主要是spring社区带动
- 功能比较多
-
缺点
- 对跨语言支持不友好(可以和knife4j整合解决这个问题)
- 代码需要引入相关依赖包和配置
- 文档相对缺少
-
Swagger3.x常用注解讲解和配置
- 用户模块相关接口文档配置
- @Api 模块配置,用在controller类,描述API接口
@Api(tags = "用户模块",value = "用户UserController")
public class UserController {
}
- @ApiOperation 接口配置,用在方法上,描述接口方法
@ApiOperation("分页用户列表")
@GetMapping("list")
public JsonData list(){
return JsonData.buildSuccess();
}
- @ApiParam 方法参数配置,用在入参上面,描述参数
@ApiOperation("用户登录")
@PostMapping("login")
public JsonData login(
@ApiParam(name = "phone", value = "手机号",example = "13888888888")
@RequestParam("phone") String phone,
@ApiParam(name = "pwd", value = "密码",example = "123456")
@RequestParam("pwd")String pwd){
return JsonData.buildSuccess();
}
- restful例子
@ApiOperation("删除用户")
@DeleteMapping("/delete/{id}")
public JsonData deleteById(@PathVariable int id) {
return JsonData.buildSuccess();
}
- @ApiIgnore 忽略此接口不生成文档
@ApiIgnore
@ApiOperation("删除用户")
@DeleteMapping("/delete/{id}")
public JsonData deleteById(@PathVariable int id) {
return JsonData.buildSuccess();
}
简介:SpringFox和自动化接口文档生成工具Swagger介绍
-
Swagger介绍
-
基于 OpenAPI 规范(OpenAPI Specification,OAS)构建的开源接口文档自动生成工具,可以让开发人员快速设计、构建、记录以及使用 Rest API
-
版本的说明
-
目前的版本有swagger2.0和3.0
-
swagger2于17年停止维护,现在最新的版本为17年发布的 Swagger3(Open Api3)。
-
-
Swagger 主要包含了以下三个部分:
- Swagger Editor:基于浏览器的编辑器,我们可以使用它编写我们 OpenAPI 规范。
- Swagger UI:它会将我们编写的 OpenAPI 规范呈现为交互式的 API 文档,后文我将使用浏览器来查看并且操作我们的 Rest API。
- Swagger Codegen:它可以通过为 OpenAPI(以前称为 Swagger)规范定义的任何 API 生成服务器存根和客户端 SDK 来简化构建过程。
-
-
-
SpringFox介绍(是 spring 社区维护的一个非官方项目)
-
是一个开源的API Doc的框架,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来, 它的前身是swagger-springmvc,可以将我们的Controller中的方法以文档的形式展现。官方定义为: Automated JSON API documentation for API's built with Spring。
-
版本的说明
- SpringFox 3.0.0 发布(突破性的变更版本)
- Spring5,Webflux支持,依赖少
- 支持OpenApi 3.0.3
- 有springboot的整合的starter,使用更便捷
-
实战新版Springboot2.x整合Swagger3.x
1. 添加依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
2. 配置文件
#spring.application.name=xd_shop接口,增加中文会乱码,可以修改文件编码,或者使用yml格式
spring.application.name=xd_shop
# ===== 自定义swagger配置 ===== #
swagger.enable=true
swagger.application-name= ${spring.application.name}
swagger.application-version=1.0
#swagger.application-description=xd_shop电商平台管理后端接口文档
swagger.application-description=xd_shop api info
3. 配置类
package com.lzh.xd_shop.config;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Component
@EnableOpenApi
@ConfigurationProperties("swagger")
@Data
public class SwaggerConfiguration{
// 丝袜哥地址:http://localhost:端口/swagger-ui/index.html
/**
* 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
*/
private Boolean enable;
/**
* 项目应用名
*/
private String applicationName;
/**
* 项目版本信息
*/
private String applicationVersion;
/**
* 项目描述信息
*/
private String applicationDescription;
@Bean
public Docket docket() {
return new Docket(DocumentationType.OAS_30)
.pathMapping("/")
// 定义是否开启swagger,false为关闭,可以通过变量控制,线上关闭
.enable(enable)
//配置api文档元信息
.apiInfo(apiInfo())
// 选择哪些接口作为swagger的doc发布
.select()
//apis() 控制哪些接口暴露给swagger,
// RequestHandlerSelectors.any() 所有都暴露
// RequestHandlerSelectors.basePackage("net.xdclass.*") 指定包位置
// withMethodAnnotation(ApiOperation.class)标记有这个注解 ApiOperation
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(applicationName)
.description(applicationDescription)
.contact(new Contact("CANCAT", "https://www.cuikaiyang.com", "1270038@qq.com"))
.version(applicationVersion)
.build();
}
}
4. 启动项目,访问浏览器
http://localhost:8081/swagger-ui/index.html
注意:如果访问不成功,记得看是否有拦截器拦截了相关资源,配置不拦截即可
5. 新建xxxController接口
package com.lzh.xd_shop.controller;
import com.lzh.xd_shop.model.BannerDO;
import com.lzh.xd_shop.service.BannerService;
import com.lzh.xd_shop.utils.JsonData;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.xd_shop.controller
* @Project:xd_shop
* @name:BannerController
* @Date:2023/4/1 下午3:56
* @Filename:BannerController
* @Description:BannerController
* @Version:1.0
*/
@RestController
@RequestMapping("/api/v1/banner")
@Api(tags = "轮播图模块",value = "轮播图BannerController")
public class BannerController {
@Autowired
private BannerService bannerService;
@RequestMapping("/listAllBanner")
public JsonData listAllBanner(){
List<BannerDO> list = bannerService.listAllBanner();
return JsonData.buildSuccess(list );
}
@RequestMapping("/getAllbannerInfo")
public JsonData getAllbannerInfo(){
List<BannerDO> list = bannerService.getAllbannerInfo();
return JsonData.buildSuccess(list );
}
@GetMapping("/list")
@ApiOperation("轮播图列表")
public JsonData list(){
BannerDO banner1 = BannerDO.builder().img("img1.cuikaiyang.com").url("www1.cuikaiyang.com").weight(100).build();
BannerDO banner2 = BannerDO.builder().img("img2.cuikaiyang.com").url("www2.cuikaiyang.com").weight(99).build();
List list = new ArrayList();
list.add(banner1);
list.add(banner2);
return JsonData.buildSuccess(list);
}
}
http://localhost:8081/api/v1/banner/list
丝袜哥界面: