zoukankan      html  css  js  c++  java
  • SpringBoot整合Swagger2

    SpringBoot整合Swagger2

    引入依赖

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>
    

    配置类

    package com.xuecheng.api.config;
    
    import io.swagger.annotations.Api;
    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 {
        /*
        Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:
        原因:主启动没有扫描到Swagger2Configuration配置类,添加@ComponentScan(basePackages = "com.xuecheng.api")
         */
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    //.apiInfo(apiInfo())
                    .apiInfo(
                            new ApiInfoBuilder()
                                .title("SpringBoot整合Swagger")
                                .description("SpringBoot整合Swagger详细信息。。。")
                                .license("ApacheL2.0")
                                .licenseUrl("http://www.baidu.com")
                                .version("1.0.0")
                                .build()
                    )
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.xuecheng"))
                    //.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("学成网api文档")
                    .description("学成网api文档")
    				//.termsOfServiceUrl("/")
                    .version("1.0.0")
                    .build();
        }
    }
    
    package com.xuecheng.api.cms;
    
    import com.xuecheng.framework.domain.cms.request.QueryPageRequest;
    import com.xuecheng.framework.model.response.QueryResponseResult;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    
    @Api(tags = "cms页面管理接口")
    public interface CmsPageControllerApi {
        @ApiOperation("分页查询")
        @ApiImplicitParams({
                @ApiImplicitParam("当前页"),
                @ApiImplicitParam("页大小")
        })
        QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
    }
    
    package com.xuecheng.manage_cms.web.controller;
    
    import com.xuecheng.api.cms.CmsPageControllerApi;
    import com.xuecheng.framework.domain.cms.CmsPage;
    import com.xuecheng.framework.domain.cms.request.QueryPageRequest;
    import com.xuecheng.framework.model.response.CommonCode;
    import com.xuecheng.framework.model.response.QueryResponseResult;
    import com.xuecheng.framework.model.response.QueryResult;
    import com.xuecheng.manage_cms.service.CmsPageService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    @Slf4j
    public class CmsPageController implements CmsPageControllerApi {
        @Autowired
        private CmsPageService cmsPageService;
    
        //这个没有加@ApiOperation注解的接口也出现在了文档中
        @RequestMapping("/demo")
        public String demo(String name){
            return name;
        }
    
        @GetMapping("/list/{page}/{size}")
        @Override
        public QueryResponseResult findList(@PathVariable("page") int page, @PathVariable("size")int size, QueryPageRequest queryPageRequest) {
            log.info("查询Cms分页");
            QueryResult<CmsPage> queryResult = new QueryResult<>();
            queryResult.setTotal(2);
            List<CmsPage> cmsPageList = new ArrayList<>();
            CmsPage cmsPage = new CmsPage();
            cmsPage.setPageName("页面1");
            cmsPageList.add(cmsPage);
            queryResult.setList(cmsPageList);
            QueryResponseResult result = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
    
            //QueryResponseResult result = cmsPageService.findList(page, size, queryPageRequest);
            return result;
        }
    }
    

    主启动类

    package com.xuecheng.manage_cms;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    
    @SpringBootApplication
    @ComponentScan(basePackages = "com.xuecheng.api")
    //发现如果手动指定了@ComponentScan就不会扫描当前项目的了,所以下面要加上扫描当前项目
    @ComponentScan(basePackages = "com.xuecheng.manage_cms")
    public class ManageCmsApplication {
        public static void main(String[] args) {
            SpringApplication.run(ManageCmsApplication.class, args);
        }
    }
    

    bugs

    Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:
    原因:主启动和swagger配置是分开到2个模块的,主启动没有扫描到Swagger2Configuration配置类,添加@ComponentScan(basePackages = "com.xuecheng.api")
    
    可以访问swagger在线文档描述信息,但是不出现文档接口。
    原因:主启动类上主动加上了@ComponentScan(basePackages = "com.xuecheng.api"),扫描指定的包后,就没有像之前自动扫描当前项目下的包,需要手动加上扫描当前项目的包。@ComponentScan(basePackages = "com.xuecheng.manage_cms")
    
  • 相关阅读:
    IIS主机托管的FSO设置用户权限问题
    关于使用UTF8开发ASP网站
    构建Android开发环境
    iOS如何取得APP的版本信息跟服务器对比进行升级提示?
    经典讲解VB.NET线程方法之访问数据库
    IIS7.0下ASP+Access(MDB)应用环境设置要点
    一文明白数据库事务隔离级别
    EA鼻祖,Zachman,6 行(视点)+ 6 列(W5H)+ 6 条规则
    C语言位运算详解
    关于while 和if
  • 原文地址:https://www.cnblogs.com/mozq/p/12151636.html
Copyright © 2011-2022 走看看