swagger2.0 和swagger3.0 踩坑

最近开始使用swagger 3.0.0来做项目,发现按照网上的教程进行配置,swagger-ui出不来,总是显示404错。经过一番搜索发现,原来是因为swagger升级到3之后,用法上大大简化了。主要的区别在以下两点:

不再需要EnableSwagger2的注解。所以之前的教程其实都不适用于swagger 3.0.0。按照之前的写法去开发,很容易掉坑。
不再需要在dependency里分别引入swagger2的两个包,取而代之的是只需要引入一个"io.springfox:springfox-boot-starter:3.0.0"。和springboot一样简洁。
上述说明其实在swagger官网有说,但是大部分人不看而已,所以给出链接:如何从swagger老版本迁移到3.0.0

swagger2.0 


pom.xml添加依赖

		<!--Swagger版本 2.9.2-->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>

2、创建 Swagger2Configuration.java

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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
​
@Configuration  
@EnableSwagger2
public class Swagger2Configuration {
​
   //api接口包扫描路径
   public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.muyao.galaxy";
​
   public static final String VERSION = "1.0.0";
​
   @Bean
   public Docket createRestApi() {
       return new Docket(DocumentationType.SWAGGER_2)
                   .apiInfo(apiInfo())
                   .select()
.apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE)) 
                   .paths(PathSelectors.any()) // 可以根据url路径设置哪些请求加入文档,忽略哪些请求
                   .build();
   }
​
   private ApiInfo apiInfo() {
       return new ApiInfoBuilder()
                   .title("单词计数服务") //设置文档的标题
                   .description("单词计数服务 API 接口文档") // 设置文档的描述
                   .version(VERSION) // 设置文档的版本信息-> 1.0.0 Version information
                   .termsOfServiceUrl("http://www.baidu.com") // 设置文档的License信息->1.3 License information
                   .build();
   }
}



作者:大鱼炖海棠
链接:https://www.jianshu.com/p/c79f6a14f6c9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

swagger3.0

maven 

有且只有这一个

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

config

package com.jdwifi.g1335333249.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;


import java.util.ArrayList;
//@Configuration

//@Profile("swagger")
//@ComponentScan("com.jdwifi.g1335333249.JdUserLogin.controller")
//public class SwaggerConfig {
//
//    @Bean
//    public Docket createRestApi() {
//        return new Docket(DocumentationType.SWAGGER_2)
//                .apiInfo(apiInfo())
//                .enable(true)
//                .select()
//                .apis(RequestHandlerSelectors.basePackage("com.jdwifi.g1335333249.JdUserLogin.controller"))
//                .paths(PathSelectors.any())
//                .build();
//    }
//
//    private ApiInfo apiInfo() {
//        return new ApiInfoBuilder()
//                .title("XXX Rest Server")
//                .description("XXXRest接口")
//                .contact(new Contact("contract", "url", "email"))
//                .version("1.0")
//                .build();
//    }
//}
@Configuration
@EnableOpenApi
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    //enable是否启动swagger,如果为False则Swagger不能在浏览器访问
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage:指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //.withClassAnnotation():扫描类上的注解
                //.withMethodAnnotation():扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.jdwifi.g1335333249.JdUserLogin.controller"))
                //paths()过滤什么路径
                /*.paths(PathSelectors.ant("/mi/**"))*/
                .build();
    }
    //作者信息
    Contact contact = new Contact("小唐","xiaotangstudio.cn","[email protected]");

    //配置Swagger 信息 = ApiInfo
    private ApiInfo apiInfo()
    {
        return new ApiInfo("小唐的Api文档",
                "好好看文档",
                "1.0",
                "xiaotangstudio.cn",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}

如果报错404 

package com.jdwifi.g1335333249.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.index.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

从现有 2.x 版本迁移 @EnableWebMvc 重要

 上述说明其实在swagger官网有说,但是大部分人不看而已,所以给出链接:如何从swagger老版本迁移到3.0.0

Spring Boot 应用程序

注意:希望得到反馈以使其更好

  1. 删除显式依赖 springfox-swagger2
  2. 删除@EnableSwagger2注释
  3. 添加springfox-boot-starter依赖
  4. Springfox 3.x 移除了对 guava 和其他 3rd 方库的依赖(还不是零依赖!依赖于 spring 插件和用于注释和模型的开放 api 库)所以如果你使用了 guava 谓词/函数,这些将需要转换到 java 8 函数接口
  5. 如果您正在使用 WebMvc 但您还没有使用该@EnableWebMvc注解,请添加此注解。

猜你喜欢

转载自blog.csdn.net/linsenaa/article/details/122197258