springboot集成springdoc-openapi-ui
- swagger 2.X是springboot用于生成在线文档的工具,基于OpenApi2
- springdoc-openapi-ui 则是基于OpenApi3,可以看成是swagger3,因为导入之后一些注解的包名都是 io.swagger.v3.oas.annotations
- baidu出来的都被swagger 2占领了,基本搜不到文档,想要查阅请自行谷歌
- 文档上说springdoc-openapi-ui能够在webflux的项目中使用,尚未尝试,留几个文档地址请自行查阅
- https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations
- https://github.com/springdoc-openapi
- https://springdoc.github.io/springdoc-openapi-demos/
implementation 'org.springdoc:springdoc-openapi-ui:1.2.3'
使用
- springdoc-openapi-ui作为springboot的组件,几乎全部使用注解进行配置,与swagger2不同的是较好依赖之后不用写任何配置文件,直接生效
- 在线文档访问页面地址为(/v3/api-docs地址是组件生成的json的地址):
http://host:port/swagger-ui/index.html?url=/v3/api-docs
- 可在配置文件中开启或者关闭:
springdoc:
api-docs:
enabled: true
注解说明
@OpenAPIDefinition(
info = @Info(
title = "标题",
version = "1.0",
description = "描述信息"
),
externalDocs = @ExternalDocumentation(description = "参考文档",
url = "https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations"
)
)
- @OpenAPIDefinition在springboot之中只会生效一个,用于描述该服务的全局信息
@RestController
@Tag(name = "HelloController")
public class HelloController {@GetMapping("/hello2")
public String hello2() {
return "hello world v3";
}}
- @Tag可以加在类和方法上,swagger2中controller会自动加上,用来在页面中显示某个接口属于某个controller,在这里需要手动加上
@Operation(summary = "测试登录的接口",
description = "描述的文字",
responses = {
@ApiResponse(description = "登录信息",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = UserModel.class))),
@ApiResponse(responseCode = "400", description = "返回400时候错误的原因")},
security = @SecurityRequirement(name = "需要认证"))
@GetMapping("/login")
public UserModel login(
@Parameter(description = "用户名")
@RequestParam(value = "https://www.it610.com/article/username", required = false) String username,
@Parameter(description = "密码")
@RequestParam(value = "https://www.it610.com/article/password") String password) {
UserModel userModel = new UserModel();
userModel.setUsername(username);
userModel.setPassword(password);
return userModel;
}
- 接口的注解@Operation,主要用来描述一些接口的信息
- @Parameter用来描述一些传入参数的信息,但是我个人不建议使用这种方式
@Operation(summary = "swagger v3 信息全部写头上", description = "描述的文字",
parameters = {
@Parameter(name = "auth", description = "请求头", in = ParameterIn.HEADER),
@Parameter(name = "id", description = "id", in = ParameterIn.PATH),
@Parameter(name = "param", description = "参数"),
},
responses = {@ApiResponse(responseCode = "400", description = "400错误")},
security = @SecurityRequirement(name = "需要认证"))
@GetMapping("/param/{id}")
public String param(HttpServletRequest httpServletRequest,
@RequestParam(value = "https://www.it610.com/article/param") String param,
@PathVariable(value = "https://www.it610.com/article/id") String id) {
String auth = httpServletRequest.getHeader("auth");
return "查看参数: " + auth;
}
- 这种方式则是把参数都放在了 @Operation之中,in可以指定参数来源
@Data
@Schema(name="UserModel", description="用户model")
public class UserModel {@Schema(description = "用户名")
private String username;
@Schema(description="密码")
private String password;
}
- @Schema可以注解实体类,swagger页面上显示实体类的信息
- 没有中文文档,只能先解读一些常用的,后续有发现了再更新
- 本项目git地址:https://github.com/ladyishenlong/infinite-project
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- Spring集成|Spring集成 Mina
- springboot使用redis缓存
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤
- springboot中.yml文件的值无法读取的问题及解决