更新时间:2025-01-09 GMT+08:00
分享

使用swagger进行在线API文档配置

文档配置

spring-boot-starter-huawei添加了swagger2和swagger3包的依赖,API在线文档使用springdoc-openapi-ui。springdoc基本配置较为简单,如下所示:

springdoc:
  api-docs:
    enabled: true
    path: /api-docs
    resolve-schema-properties: true
  swagger-ui:
    path: /swagger-ui.html #在线文档访问路径,实际访问路径为:http://{host}:{port}/{context-path}/swagger-ui.html
    showCommonExtensions: true
    disable-swagger-default-url: false

若原有项目中使用的是springfox+swagger,则启动时可能报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'swaggerWelcome' defined in class path resource [org/springdoc/webmvc/ui/SwaggerConfig.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springdoc.webmvc.ui.SwaggerWelcomeWebMvc] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

此时,若后续仍想使用springfox+swagger,则将spring-boot-starter-huawei中的springdoc排除即可:

<dependency>
    <groupId>com.huaweicloud</groupId>
    <artifactId>spring-boot-starter-huawei</artifactId>
    <version>${spring.boot.starter.huawei}</version>
    <exclusions>
        <exclusion>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
        </exclusion>
    </exclusions>
</dependency>

若后续使用springdoc生成在线api文档,则:

1、将原来的sprignfox相关的依赖删除。

2、将配置"SwaggerConfig"(根据实际情况查找配置类名称)相关的配置删除。

3、配置文件中添加springdoc的配置并删除springfox的配置。

swagger支持https和认证的方式

  • 支持https

    在启动类中加入注解:

    @OpenAPIDefinition(
            servers = {
                @Server(
                        url = "https://coralgeneratorsvr.{Environment}-szv-kunpeng-camp.tools.huawei.com/coralgeneratorsvr", #替换成自己的服务地址
                        variables = {
                            @ServerVariable(
                                    name = "Environment",# 参数定义,可使用{param}取其中的值
                                    allowableValues = {"alpha", "beta", "gamma", "prod"},#参数取值范围
                                    defaultValue = "alpha"),
                        },
                        description = "CoralGeneratorSvr Environmental Urls"),
                @Server(url = "http://localhost:8080/coralgeneratorsvr", description = "Local Dev Url")
            },
            info = # 服务描述信息
                    @Info(
                            title = "CoralGeneratorSvr",
                            version = "v1",
                            description = "Coral Generator Server",
                            contact = @Contact(name = "x00464738", email = "xiaoweimin@huawei.com")))
    @SpringBootApplication
    @ComponentScan(value = {"com.huawei.coral", "com.huawei.coral.coralgeneratorsvr", "com.huawei.clouddragon.devuc.sdk.*", "com.huawei.clouddragon.apigateway_client"})
    @MapperScan("com.huawei.coral.coralgeneratorsvr.mapper")
    @Slf4j
    public class Application extends SpringBootServletInitializer {
    	...
    }
  • 支持服务接口认证

    新增一个配置类,在配置类中加入以下配置:

    /**
     * 在线文档接口认证配置
     *
     * @since 2021-08-12
     */
    @Configuration(proxyBeanMethods = false)
    public class SwaggerAuthConfig {
        @Bean
        public OpenAPI springShopOpenAPI() {
            return new OpenAPI()
                    .components(new Components()
                            .addSecuritySchemes("xAuthToken",
                                    new SecurityScheme()
                                            .type(SecurityScheme.Type.APIKEY) //请求认证类型
                                            .name("x-auth-token") //参数名称
                                            .description("sso proxy token: x-auth-token") //API key描述
                                            .in(SecurityScheme.In.HEADER))) //设置API key的存放位置(发送请求时请求头中会带上x-auth-token)
                    .security(Collections.singletonList(new SecurityRequirement().addList("xAuthToken"))) //SecurityRequirement中配置的名称需要与SecuritySchema的名称匹配
                    .info(new Info().title("AuthDemo")
                            .description("AuthDemo接口文档")
                            .version("0.2.0-RELEASE"));
        }
    }

    完成以上配置后,在线文档中会多出一个认证按钮:

    图1 认证

    在未输入认证凭证时,直接访问需要认证的接口会返回需要认证的信息:

    图2 返回认证信息

    输入认证凭证:

    图3 输入认证凭证
    图4 认证完成

    输入认证凭证后,再次调用接口时会将认证信息以配置的方式同请求内容一同发送。

    图5 发送认证信息

相关文档