springboot集成Swagger并修改Swagger默认ApiInfo页面不现实

如下所示,是我的代码:

@Configuration   //加入到容器里面
@EnableSwagger2 //开启Swagger
public class SwaggerConfig {

//  配置了Swagger的Docket实例
    @Bean
    public Docket docket() {
//        Docket有很多的配置,我们可以先配置一个apiInfo()
//        apiInfo()里面需要传入一个ApiInfo的参数,那我们就在下面定义一个
      return new Docket(DocumentationType.SWAGGER_2)
              .apiInfo(apiInfo());
    }

//   配置Swagger信息 = apiInfo
    private ApiInfo apiInfo(){
//      下面的这套配置就把原来的static代码块覆盖掉
//      作者信息,通过查看源码得知
        Contact contact = new Contact("张靖奇", "https://blog.kuangstudy.com/", "1149345976@qq.com");
        return new ApiInfo(
                "张靖奇的API文档",
                "练习!!!!!!!",
                "v1.0",
                "https://blog.kuangstudy.com/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

我的新的ApiInfo的配置按说已经把默认的配置覆盖掉才对,但是我访问页面后,依然是默认的配置

img

参考GPT和自己的思路:

你可以尝试刷新Swagger的缓存并重新生成文档来解决这个问题。你可以添加@Bean方法swaggerResourcesProvider(),示例代码如下:

@Bean
public SwaggerResourcesProvider swaggerResourcesProvider() {
    return () -> {
        List<SwaggerResource> resources = new ArrayList<>();
        resources.add(swaggerResource("default",
                "/v2/api-docs", "2.0"));
        return resources;
    };
}

这个方法返回一个SwaggerResourcesProvider,这个接口是用来提供Swagger的JSON描述文档,Swagger UI会读取这个接口提供的文档来渲染页面。可以通过覆盖这个接口的实现来改变Swagger UI展示的内容。

同时,你可以使用Swagger-Bootstrap-UI工具,它可以自定义Swagger UI页面,并提供更加丰富的功能。你可以在Spring Boot中使用它来达到你所期望的效果。你可以通过以下步骤来实现:

  1. pom.xml文件中添加以下Dependency,以导入Swagger-Bootstrap-UI:
<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>swagger-bootstrap-ui</artifactId>
  <version>1.9.6</version>
</dependency>
  1. 修改SwaggerConfig.java,以实现使用Swagger-Bootstrap-UI:
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class SwaggerConfig {

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API文档")
                .description("demo")
                .version("1.0")
                .build();
    }
}

这样修改后,你应该就可以使用Swagger-Bootstrap-UI,并展示你自定义的ApiInfo了。

参考GPT和自己的思路:

根据你提供的代码和描述,可能是因为你的Swagger配置类没有被正确加载,导致修改后的ApiInfo并没有生效。你可以尝试以下步骤:

  1. 确认你的Swagger配置类所在的包被正确扫描到了,可以在SpringBoot启动日志中查看扫描到的包路径;
  2. 确认你的Swagger配置类已经被SpringBoot容器正确加载,可以在SpringBoot启动日志中查看是否出现类似“Adding @Bean method”等日志;
  3. 确认你的Swagger配置类中的Docket实例已经被正确创建,并且被正确配置了ApiInfo;
  4. 如果以上步骤都没有问题,可以尝试清除浏览器缓存或者重启浏览器再次访问Swagger页面。

如果以上步骤都没有解决问题,也可以尝试在Swagger配置类中添加一些其他配置,例如扫描的Controller包路径等,以确保配置类被正确加载和起作用。

确定不用 ApiInfoBuilder 吗? return new ApiInfoBuilder().xxx.xxx.xxx.build()