zoukankan      html  css  js  c++  java
  • springboot集成swagger

    一、概要

      Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

    二、详细步骤

      1.添加maven依赖

     <!--引入swagger-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
                <version>1.5.20</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

      2.在pom中添加插件

          <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.14.1</version>
                    <configuration>
                        <systemPropertyVariables>
                            <io.springfox.staticdocs.outputDir>${project.build.directory}/swagger/api/1.3.0</io.springfox.staticdocs.outputDir>
                            <io.swagger.json.uris>/v2/api-docs?group=api</io.swagger.json.uris>
                            <io.swagger.json.output.name>swagger-pai-v1.json</io.swagger.json.output.name>
                        </systemPropertyVariables>
                        <argLine>-Xmx256M -XX:MaxPermSize=128M</argLine>
                        <parallel>false</parallel>
                        <testFailureIgnore>true</testFailureIgnore>
                        <includes>
                            <include>**/*.java</include>
                        </includes>
                    </configuration>
                </plugin>

    三、添加配置类

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket customDocket() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .globalOperationParameters(setHeaderToken()) //如果使用到了token,这里加入token设置
                    .apiInfo(apiInfo())
                    .groupName("api")
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.swagger.web.api")) //api接口目录
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private List<Parameter> setHeaderToken() {
            ParameterBuilder tokenPra = new ParameterBuilder();
            List<Parameter> pars = new ArrayList<>();
            tokenPra.name("Token").description("接口校验令牌").modelRef(new ModelRef("string")).defaultValue(TokenUtils.get()).parameterType("header")
                    .required(true).build();
            pars.add(tokenPra.build());
    
            return pars;
        }
    
        private ApiInfo apiInfo() {
            Contact contact = new Contact("小明", "", "xiaoming@qq.com");
    
            return new ApiInfoBuilder().version("1.3").title("swagger测试接口").description("swagger测试接口").contact(contact).license("") .licenseUrl("http://www.qq.com").build(); } 
    }
    SwaggerConfig 类可随意放在代码的目录中,加入这些配置后,启动springboot项目,访问 http://localhost:8080/swaggerDemo/swagger-ui.html  ,其中swaggerDemo是项目的上下文,如果配置了不用上下文,也可以直接
    http://localhost:8080/swagger-ui.html 进行启动,swagger的json路径为:http://localhost:8080/swaggerDemo/v2/api-docs?group=api,可以看到完整路径

    四、生成swagger.json文件
    编写测试类,在mvn install的时候可以将swagger.json生成到你在plugin配置的路径中
    @WebAppConfiguration
    //// 让 JUnit 运行 Spring 的测试环境, 获得 Spring 环境的上下文的支持
    @RunWith(SpringRunner.class)
    //// 获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
    @SpringBootTest
    public class SwaggerTest {
    
        @Autowired
        private WebApplicationContext wac;
    
        private MockMvc mockMvc;
    
    
        @Before
        public void setup(){
            //init applicationContext
            this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        }
    
        @Test
        public void getSwaggerJson() throws Exception{
            //获取插件中配置的swagger文件输出地址
            String outputDir = System.getProperty("io.springfox.staticdocs.outputDir");
            //获取插件中配置的swagger.json的访问地址,有几个接口分组就有几个访问地址,地址必须是swagger2controller中原生的,如果是在web.xml自定义的则无法访问,因为mock的服务不会解析web.xml
            String uris = System.getProperty("io.swagger.json.uris");
            //获取插件中配置的每个json文件的名称,名称可配置多个,有几个接口分组就有几个名称, 名称的格式必须是:组件标识-接口分组标识-接口版本号,例如:swagger-api-v1
            String swaggerOutName = System.getProperty("io.swagger.json.output.name");
            String[] uriArray = uris.trim().split(",");
            String[] swaggerOutNameArray = swaggerOutName.trim().split(",");
    
            for (int i = 0; i < uriArray.length; i++){
                MvcResult mvcResult = this.mockMvc
                        .perform((MockMvcRequestBuilders.get(uriArray[i])) // 测试的相对地址
                                .accept(MediaType.APPLICATION_JSON_UTF8)) // accept response content type
                        .andExpect(MockMvcResultMatchers.status().isOk())  // 期待返回状态吗码200
                        .andReturn();
    
                MockHttpServletResponse response = mvcResult.getResponse();
                String swaggerJson = response.getContentAsString();
                Files.createDirectories(Paths.get(outputDir));
                try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, swaggerOutNameArray[i]), StandardCharsets.UTF_8)){
                    writer.write(swaggerJson);
                }
            }
    
        }
    }

    这样生成的json文件就会在项目的target目录的/swagger/api/1.3.0下,名字叫 swagger-pai-v1.json,路径及文件名都是在plugin中配置的

  • 相关阅读:
    01.Markdown学习
    微信小程序开发基础
    如何在本地搭建微信小程序服务器
    Golang | 报错
    Golang | 扩展
    Golang | 基础
    Golang | 基础
    Golang | 基础
    Chrome——书签同步码云
    Rustlings_structs
  • 原文地址:https://www.cnblogs.com/aimed/p/10268992.html
Copyright © 2011-2022 走看看