SpringMVC与Swagger 整合

来源:互联网 发布:nodejs php 网站 编辑:程序博客网 时间:2024/06/06 01:03

Swagger简介:

[plain] view plain copy
 print?
  1. Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。
  2. Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 

首先添加swagger依赖(maven管理):

[html] view plain copy
 print?
  1. <!-- swagger -->  
  2. <dependency>    
  3.     <groupId>com.mangofactory</groupId>    
  4.     <artifactId>swagger-springmvc</artifactId>    
  5.     <version>1.0.2</version>    
  6. </dependency>  
  7. <dependency>  
  8.     <groupId>com.fasterxml.jackson.core</groupId>  
  9.     <artifactId>jackson-core</artifactId>  
  10.     <version>2.5.1</version>  
  11. </dependency>  
  12. <dependency>  
  13.     <groupId>com.fasterxml.jackson.core</groupId>  
  14.     <artifactId>jackson-databind</artifactId>  
  15.     <version>2.5.1</version>  
  16. </dependency>  
  17. <dependency>  
  18.     <groupId>com.fasterxml.jackson.core</groupId>  
  19.     <artifactId>jackson-annotations</artifactId>  
  20.     <version>2.5.1</version>  
  21. </dependency>   

创建自定义swagger初始化配置文件:

[java] view plain copy
 print?
  1. package com.ksf.server.util;
  2. import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
  3. import com.mangofactory.swagger.models.dto.ApiInfo;
  4. import com.mangofactory.swagger.plugin.EnableSwagger;
  5. import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.ComponentScan;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  11. /**
  12. * 描述:
  13. * @author Idowww.
  14.  * @date 2017/01/27.
  15. */
  16. @Configuration
  17. @EnableSwagger  
  18. @EnableWebMvc
  19. @ComponentScan({"com.mangofactory.swagger"})
  20. public class SwaggerConfig {  
  21.   
  22.     private SpringSwaggerConfig springSwaggerConfig;  
  23.   
  24.     /** 
  25.      * Required to autowire SpringSwaggerConfig 
  26.      */  
  27.     @Autowired  
  28.     public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)  
  29.     {  
  30.         this.springSwaggerConfig = springSwaggerConfig;  
  31.     }  
  32.   
  33.     /** 
  34.      * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc 
  35.      * framework - allowing for multiple swagger groups i.e. same code base 
  36.      * multiple swagger resource listings. 
  37.      */  
  38.     @Bean  
  39.     public SwaggerSpringMvcPlugin customImplementation()  
  40.     {  
  41.         return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)  
  42.                 .apiInfo(apiInfo())  
  43.                 .includePatterns(".*");  
  44.     }  
  45.   
  46.     private ApiInfo apiInfo()  
  47.     {  
  48.         ApiInfo apiInfo = new ApiInfo(  
  49.                "KSF ACT",  
  50.                 "康师傅二维码促销模块, 项目基础目录是 /server/ , /b/ 目录是店铺端的接口, /c/ 目录是客户端的接口",  
  51.                 "开发者:Idowww",  
  52.                 "1297942695@qq.com",  
  53.                 "MIT License",  
  54.                 "/LICENSE");  
  55.         return apiInfo;  
  56.     }  
  57. }  
将swagger配置类及依赖SpringSwaggerConfig加载到spring容器中:

[html] view plain copy
 print?
  1. <!-- 启用MVC注解 -->  
  2. <mvc:annotation-driven />  
  3. <!-- 将 springSwaggerConfig加载到spring容器 -->  
  4. <bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />  
  5. <!-- 将自定义的swagger配置类加载到spring容器 -->  
  6. <bean class="com.yrok.swagger.SwaggerConfig" />  
配置相关controller的api:

[java] view plain copy
 print?
  1. package com.ksf.server.controller.b; 
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestBody;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import com.ksf.server.bean.session.ShopUserBean;
  8. import com.ksf.server.consts.ResCode;
  9. import com.ksf.server.dto.BaseReq;
  10. import com.ksf.server.dto.BaseRes;
  11. import com.ksf.server.dto.b.RedPackageListRespBean;
  12. import com.ksf.server.dto.b.RedPackageReqBean;
  13. import com.ksf.server.service.RedPackageService;
  14. import com.mangofactory.swagger.annotations.ApiIgnore;
  15. import com.wordnik.swagger.annotations.ApiOperation;
  16. @Api(value="redPackage")  
  17. @Controller  
  18. @RequestMapping(value="/b/redPackage")  
  19. public class UserController {  
  20.   
  21.     @Autowired 
  22.     private RedPackageService redPackageService;
  23.   
  24.     @RequestMapping(value = "/queryRedpackageList")  
  25.     @ResponseBody  
  26.     @ApiOperation(value = "公众号获取红包列表的接口", notes = "公众号获取红包列表的列表", httpMethod = "POST") 
  27.     public BaseRes<RedPackageListRespBean> list(@RequestBody BaseReq<RedPackageReqBean> req, @ApiIgnore BaseRes<RedPackageListRespBean> res,@ApiIgnore ShopUserBean shopUserBean) {
  28.       RedPackageReqBean reqBean = req.getRequest();
  29.       if (reqBean == null) {
  30.         return res.setRes(ResCode.ARGS_ERROR.getCode(), "请求参数不能为空");
  31.       }
  32.       Long shopId = shopUserBean.getShopAssistant().getId();
  33.       RedPackageListRespBean respBean = redPackageService.listRedPackageRecord(reqBean,shopId);
  34.       res.setResponse(respBean);
  35.       res.setCode(ResCode.OK.getCode());   
  36.       res.setDes(ResCode.OK.getDes());
  37.       return res;
  38.    }
  39. }  

Swagger 和 UI 的集成:

在GitHub上将SwaggerUi下载,地址:https://github.com/swagger-api/swagger-ui

解压后将dist文件夹中所有的文件拷贝到webapp/swagger这里的swagger是自定义的,可以写成自己创建的目录。

修改index.html中的 http://petstore.swagger.wordnik.com/v2/swagger.json修改为自己项目路径+api-docs,例如:http://localhost:8080/server/api-docs:server为项目名称。

在spring-mvc.xml中过滤掉swagger-ui的文件:

[html] view plain copy
 print?
  1. <!-- 静态资源文件,不会被Spring MVC拦截 -->  
  2. <mvc:resources mapping="/swagger/**" location="/swagger/" />  
到这里基本完成了Springmvc和Swagger的整合,下面是测试结果:

在浏览器中访问:http://localhost:8080/server/swagger/index.html#/b/redPackage/queryRedpackageList