SpringBoot整合Swagger UI

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

配置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

配置

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

代理设置

需要指定转发端口

RequestHeader set X-Forwarded-Prefix "/custom-path"
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
1
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

实体类和属性上的注解

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

参考资料

最近更新: 2023-07-05 01:24:24