SpringBoot整合Swagger UI
Hz 2023-07-05 Wednesday Java
在SpringBoot整合SwaggerUI的方法
引入依赖
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.3</version>
</dependency>
<!-- 注解在下面这个依赖里,可以单独引入 -->
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.2.8</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
配置Spring
@Configuration
@OpenAPIDefinition
public class SwaggerConfig {
@Bean
public OpenAPI apiInfo() {
return new OpenAPI().components(new Components()
.addSecuritySchemes("access-token", new SecurityScheme().type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER).name("access-token")))
.info(new Info().title("General API Document.").version("1.0.0")).addSecurityItem(
new SecurityRequirement().addList("access-token", Arrays.asList("read", "write")));
}
@Bean
public GroupedOpenApi httpApi() {
return GroupedOpenApi.builder()
.group("http")
.pathsToMatch("/**")
.build();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
配置
Since spring-boot 2.2, there is a new property to handle reverse proxy headers:
server.forward-headers-strategy=framework
1
Or you you can add the following Bean to your application:
@Bean
ForwardedHeaderFilter forwardedHeaderFilter() {
return new ForwardedHeaderFilter();
}
1
2
3
4
2
3
4
代理设置
需要指定转发端口
RequestHeader set X-Forwarded-Prefix "/custom-path"
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
1
2
3
2
3
注解使用
接口类和方法上的注解
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@RestController
@RequestMapping("/api/v1/service/abc")
@Tag(name = "XXX", description = "这是一个XXX功能")
public class XXXController {
public static final Logger LOG = LoggerFactory.getLogger(XXXController.class);
@Operation(
summary = "摘要",
description = "描述",
tags = {"类上的Tag,例如这里的XXX"})
@GetMapping("/query_tree_nodes")
public WebResult<Tree<Node>> loadTree() {
return WebResult.success(new Tree<Node>());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
实体类和属性上的注解
import java.io.Serializable;
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(name = "WebResult", description = "Standard Web Response bean for entity")
public class WebResult<T extends Serializable> implements Serializable {
@Schema(name = "retCode", description = "返回状态码")
private int retCode;
@Schema(name = "retMsg", description = "返回消息")
private String retMsg;
@Schema(name = "value", description = "返回实体")
private T value;
public WebResult() {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17