Spring Boot - Swagger - Swagger 不会将标准值更改为多模块项目的 ApiInfo/GlobalResponse

Posted

技术标签:

【中文标题】Spring Boot - Swagger - Swagger 不会将标准值更改为多模块项目的 ApiInfo/GlobalResponse【英文标题】:Spring Boot - Swagger - Swagger doesn't change standards values as ApiInfo/GlobalResponse for Multimodule Project 【发布时间】:2021-09-23 23:09:06 【问题描述】:

首先,提前感谢所有回复。

现在让我们继续讨论这个问题。今天,我为一个 Spring Boot 项目(boot-starter、swagger2 和 swagger-ui)安装了所有 3.0.0 Swagger 依赖项。一切正常,但我无法更改 Docket 构建器中的 apiInfo 信息。

Gradle:

    implementation "io.springfox:springfox-boot-starter:3.0.0"
    implementation "io.springfox:springfox-swagger2:3.0.0"
    implementation "io.springfox:springfox-swagger-ui:3.0.0"

SpringFoxConfig.java:

package io.ubivis.swagger;

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;

@Configuration
public class SpringFoxConfig 
    @Bean
    public Docket api() 
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(metaData());
    

    private ApiInfo metaData() 
        return new ApiInfoBuilder()

                .title("Spring Boot REST API")
                .description("Spring Boot REST API for Space Study")
                .version("1.0.0")
                .license("Apache 2.0")
                .contact(new Contact("XYZ", "XYZ.com", "XYZ@gmail.com"))
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    

即使在 Docket 构建器中调用了 metaData 函数,Swagger just ignores it and doesn't change any of the default information。

有谁知道如何解决这个问题?谢谢!

编辑:

刚刚意识到我无法更改任何默认值。即使我尝试更改 GlobalResponseMessage:

    @Bean
    public Docket api() 
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .useDefaultResponseMessages(false)
                .globalResponseMessage(RequestMethod.POST, responseMessageForGet())
                .apiInfo(metaData());
    

什么都没有发生,页面继续显示默认的 globalResponseMessage。

在此编辑中,我尝试将依赖项降级到版本 2.9.2,寻找可能是我的问题所在。但我仍然有同样的问题(现在又是一个哈哈)。

【问题讨论】:

嗨,你不应该最好在最后调用 .build() 方法吗?我认为路径构建良好,但 defaultResponse、globalResponse 和 apiInfo 保持默认。 您好,感谢您的回复!是的,我认为它们应该在 2.X.X 版本中的 .build() 方法之前。我可能犯了一个错误,因为 Swagger 的 3.0.0 版将这些函数转换为在构建之后调用。不幸的是,这并不能解决问题,但这个版本问题很重要。 【参考方案1】:

刚刚找到了我的问题的答案。其实一开始我忘了说我的项目是一个多模块的spring项目。我不认为这会改变问题,但我错了。问题是我的 SpringApplication 没有扫描 SwaggerConfiguration 类。

如果你有任何类似的问题,你应该在你的 SpringBootApplication 中插入这个注解:

@SpringBootApplication(scanBasePackages = "br.com.vicnetto")
@EnableSwagger2
public class SpringBootApplication 

    public static void main(String[] args) 
        SpringApplication.run(ConsoleConfigApplication.class, args);
    

@SpringBootApplication 的参数 scanBasePackages 应包含 SwaggerConfiguration 类。

并且第二个注解@EnableSwagger2需要在@SpringBootApplication上下文中(仅适用于3.0.0以下的Swagger版本)

【讨论】:

以上是关于Spring Boot - Swagger - Swagger 不会将标准值更改为多模块项目的 ApiInfo/GlobalResponse的主要内容,如果未能解决你的问题,请参考以下文章

Swagger Learing - Spring Boot 整合swagger

Spring Boot 集成Swagger

Spring boot整合Swagger

spring boot整合swagger

怎么在springboot项目中使用swagger-spring-boot-starter

Spring boot 下使用 Swagger