Springboot2.x整合Swagger3.0配置与问题解决

注意:访问路径改为 ip:port/[应用名称]/swagger-ui/index.html

转自:Springboot2.3.5整合Swagger3.0以及访问swagger首页404的问题_@enableopenapi_-yanhui-的博客-CSDN博客

1. 导入Swagger对应的pom.xml文件:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

2. @EnableOpenApi

Swagger3.0的注解改为@EnableOpenApi,可以自定义SwaggerConfig类,也可以直接加在Springboot启动类上,如果选择SwaggerConfig不要忘记加上@Configuration类,否则不生效。

@EnableOpenApi
@Configuration
public class SwaggerConfig{

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.**.**"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API端接口文档")
                //.description("更多请咨询服务开发者XXX")
                //.contact(new Contact("meritco", "北京", ""))
                .version("1.0")
                .build();
    }
}

3. 控制器注解

在控制器上加上如下注解:

@Api(tags={"用户操作接口"})
@RestController()
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String hello(@RequestParam(value = "name") String name) {
        return String.format("Hello %s!", name);
    }
}

4. 效果

如果在springboot启动类上加@EnableOpenApi注解,不做任何配置,访问http://10.153.88.238:8085/swagger-ui/index.html会出现如下界面:

在这里插入图片描述

5.访问swagger-ui/index.html报404

如果在上一步中访问报404,可通过配置静态资源访问路径来解决,资源访问路径取决于springfox-swagger-ui-3.0.0.jarindex.html的位置,下图中红方框路径组合为swagger-ui的访问路径。

在这里插入图片描述

classpath的配置如下:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/swagger-ui/")
                .setViewName("forward:/swagger-ui/index.html");
    }
}

配置后成功访问。