→ springboot 集成 Swagger2 ←
这次直接使用 2.5.6 的 spring-boot 。
依赖:
org.springframework.boot spring-boot-starter-parent 2.5.6 org.springframework.boot spring-boot-starter-web io.springfox springfox-boot-starter 3.0.0 org.projectlombok lombok true
启动类加注解 @EnableOpenApi
新建测试类
@RestController @RequestMapping("/test") public class SwaggerController { @GetMapping("/get") public String getStr(String str) { return "SELECT " + str; } @PostMapping("/post") public String postStr(String str) { return "CREATE " + str; } @PutMapping("/put") public String putStr(String str) { return "UPDATE " + str; } @NoSwagger @PatchMapping("/patch") public String patchStr(String str) { return "UPDATE " + str; } @DeleteMapping("/delete") public String deleteStr(String str) { return "DELETE " + str; } }
访问 http://127.0.0.1:8080/swagger-ui.html ,没错,又是 Error 页面
此部分参考:https://blog.csdn.net/mmmm0584/article/details/117786055
在swagger3.0中,swagger-ui.html的位置发生了变化:
→
所以路径也变了:http://127.0.0.1:8080/swagger-ui.html → http://127.0.0.1:8080/swagger-ui/index.html
新建一个配置类:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.VendorExtension; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import java.util.HashSet; @Configuration public class Swagger3Conf { @Bean public Docket createDocket() { return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号 .apiInfo(createApiInfo()); } @Bean public ApiInfo createApiInfo() { // // 写法一 // return new ApiInfoBuilder() // .title("Swagger3 文档案例") // .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。") // .version("1.0.1") // .contact( // // name url email // new Contact("364.99°的文档", // 文档发布者名称 // "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址 // "2190826197@qq.com" // 文档发布者的邮箱 // ) // ) // .build(); // 写法二 return new ApiInfo( "Swagger3 文档案例", "Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。", "1.0.1", "https://blog.csdn.net/m0_54355172", new Contact("364.99°的文档", // 文档发布者名称 "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址 "2190826197@qq.com" // 文档发布者的邮箱 ), "364.99°", "https://blog.csdn.net/m0_54355172", new HashSet<>()); } }
@Bean public Docket createDocket() { return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号 .enable(false)// 关闭文档 .apiInfo(createApiInfo()); }
注意: 一般只有在测试环境才会用到 Swagger,在生产环境中会把它关闭掉,为了安全与效率。
.select() .apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller")) .build()
新建一个控制器:
@Api(tags = "other 接口 API") @RestController @RequestMapping("/other") public class OtherController { @GetMapping("getInfo") public String getInfo() { return "information"; } }
.select() .paths(PathSelectors.ant("/other/**")) .build()
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import java.util.HashSet; @Configuration public class Swagger3Conf { @Bean public Docket createDocket01() { return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号 .groupName("other 组") .enable(true)// 关闭文档 .select() .paths(PathSelectors.ant("/other/**")) .build() .apiInfo(createApiInfo()); } @Bean public Docket createDocket02() { return new Docket(DocumentationType.OAS_30) .groupName("test 组") .select() .apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller")) .build() .apiInfo( new ApiInfoBuilder() .title("Swagger3 文档案例") .build() ); } @Bean public ApiInfo createApiInfo() { // // 写法一 // return new ApiInfoBuilder() // .title("Swagger3 文档案例") // .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。") // .version("1.0.1") // .contact( // // name url email // new Contact("364.99°的文档", // 文档发布者名称 // "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址 // "2190826197@qq.com" // 文档发布者的邮箱 // ) // ) // .build(); // 写法二 return new ApiInfo( "Swagger3 文档案例", "Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。", "1.0.1", "https://blog.csdn.net/m0_54355172", new Contact("364.99°的文档", // 文档发布者名称 "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址 "2190826197@qq.com" // 文档发布者的邮箱 ), "364.99°", "https://blog.csdn.net/m0_54355172", new HashSet<>()); } }
和 Swagger2 一样,其常用注解还是如下几个:
常用注解 | 注解说明 | 常用属性 | 属性说明 |
---|---|---|---|
@Api | 类注解,常用来给文档中的控制器取别名 | tags | 别名 |
@ApiOperation | 方法/类注解,常用来描述方法 | value notes | 方法说明 方法备注 |
@ApiParam | 参数/方法/属性注解,常用来描述参数 | name value required | 参数名 补充描述 是否必须 |
@ApiIgnore | 方法/属性注解,使被标注方法不生成文档 | - | - |
@ApiImplicitParam | 方法注解,描述一个参数 | name value name required paramType dataType defaultValue | 参数名 补充说明 是否必传 参数位置(header、query、path) 参数类型(默认 String) 默认值 |
@ApiImplicitParams | 搭配 @ApiImplicitParam 一起使用,描述一组参数 | ||
@ApiResponse | 方法注解,表达一个错误的响应信息 | code message response | 整型 字符串 异常信息(默认 String 类型) |
@ApiResponses | 搭配 @ApiResponse 一起使用,参考 @ApiImplicitParams | ||
@ApiModel | 类注解,当此实体类被作为返回类型用于 API 帮助文档中的接口方法中,此注解被解析 | value description | 实体类名 补充描述 |
@ApiModelProperty | 属性注解,搭配 @ApiModel 使用 | value example | 属性名 示例 |
import com.chenjy.swagger2.dto.TestDto; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @Api(tags = {"test 接口 API"}) @RestController public class SwaggerController { @ApiResponses({ @ApiResponse(code = 1, message = "查询成功"), @ApiResponse(code = -1, message = "查询失败") }) @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "角色名", required = false, defaultValue = "张三"), @ApiImplicitParam(name = "num", value = "序列号", required = true) } ) @PostMapping("/getInfo") public TestDto getInfo(String name, Integer num) { return new TestDto(name, num); } @ApiIgnore @GetMapping("/getStr") public String getStr(String name) { return name; } }
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @ApiModel( value = "角色实体类", description = "存储数据并返回") public class TestDto { @ApiModelProperty( value = "姓名", example = "张三", hidden = false) private String name; @ApiModelProperty( value = "序列号", example = "1") private Integer num; }