美文网首页
SSM+Dubbo项目中整合Springfox(Swagger2

SSM+Dubbo项目中整合Springfox(Swagger2

作者: 闻香师叔 | 来源:发表于2019-07-08 19:39 被阅读0次

    青橙电商项目是典型的SSM框架开发,使用Dubbo分布式架构.包含网站前台和管理后台两大部分。网站前台
    包含主站频道(首页、搜索、购物车及支付)、用户中心、秒杀、优惠券等频道。管理
    后台包含商品、订单、库存、用户、运营、统计、财务、设置等功能。

    1.系统结构图

    image.png

    项目目录结构:

    image.png

    2.导入Maven坐标

    在qingcheng_web_manager模块的pom文件中添加依赖,此模块是后台管理的web模块.

            <!--swagger相关-->
            <!--springfox的核心jar包-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <!--springfox-ui的jar包(里面包含了swagger的界面静态文件)-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <!--springfox依赖的jar包;如果你的项目中已经集成了无需重复-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
    

    2.创建配置文件

    在此模块源码目录下创建一个单独的package,然后创建SwaggerConfig.java文件

    package com.qingcheng.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import springfox.documentation.builders.ApiInfoBuilder;
    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;
    
    @WebAppConfiguration
    @EnableSwagger2//重要!
    @EnableWebMvc
    @ComponentScan(basePackages = "com.qingcheng.controller")
    public class SwaggerConfig {
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.any())
                    .build()
                    .apiInfo(apiInfo());
        }
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("青橙电商项目接口文档")
                    .description("青橙电商项目接口测试")
                    .version("1.0.0")
                    .termsOfServiceUrl("")
                    .license("")
                    .licenseUrl("")
                    .build();
        }
    }
    
    

    3.在SpringMVC文件的配置文件中配置swagger

    此项目采用的Dubbo分布式框架,所以在此模块下配置applicationContext-swagger.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/mvc
             http://www.springframework.org/schema/mvc/spring-mvc.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--将静态资源交由默认的servlet处理-->
        <mvc:default-servlet-handler />
        <!--向容器自动注入配置-->
        <context:annotation-config />
        <!--自动扫描,使springMVC认为包下用了@controller注解的类是控制器-->
        <context:component-scan base-package="com.qingcheng.controller"/>
        <!--重要!将你的SwaggerConfig配置类注入-->
        <bean class="com.qingcheng.config.SwaggerConfig"/>
        <!--重要!配置swagger资源不被拦截-->
        <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
        <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/" />
    
    </beans>
    
    

    4.修改web.xml文件中配置所有的请求都经DispatcherServlet处理

      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath*:applicationContext*.xml</param-value>
        </init-param>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    

    注意:这个地方必须配置,如果你配置的是*.XXX的形式会出现api-docs访问出错,这就会导致swagger-ui找不到api的有效路径。使swagger无法正常工作.

    5.controller的配置,这里我只做简单的配置测试swagger是否正常工作

    import java.util.List;
    import java.util.Map;
    
    @RestController
    @RequestMapping("/brand")
    @Api(value = "/brand", tags = "Brand品牌接口")
    public class BrandController {
    
        @Reference
        private BrandService brandService;
    
        @ApiOperation(value = "获取品牌列表",notes = "查询所有品牌列表")
        @GetMapping("/findAll")
        public List<Brand> findAll() {
            return brandService.findAll();
        }
    
    
        @ApiOperation(value ="获取品牌分页列表",notes = "根据page和size查询分页")
        @GetMapping("/findPage")
        public PageResult<Brand> pageResult( int page, int size) {
            return brandService.findPage(page, size);
        }
    
    

    运行:我这里使用Maven中的Tomcat8.5.16插件能够正常的工作

    image.png

    相关文章

      网友评论

          本文标题:SSM+Dubbo项目中整合Springfox(Swagger2

          本文链接:https://www.haomeiwen.com/subject/iwgahctx.html