SpringMVC与Swagger整合

来源:互联网 发布:mac不能复制文件到u盘 编辑:程序博客网 时间:2024/06/05 16:54

一 :添加依赖

<!-- swagger-springmvc --><dependency><groupId>com.mangofactory</groupId><artifactId>swagger-springmvc</artifactId><version>1.0.2</version></dependency><dependency><groupId>com.mangofactory</groupId><artifactId>swagger-models</artifactId><version>1.0.2</version></dependency><dependency><groupId>com.wordnik</groupId><artifactId>swagger-annotations</artifactId><version>1.3.11</version></dependency><!-- swagger-springmvc dependencies --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>15.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.4.4</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.4.4</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.4.4</version></dependency><dependency><groupId>com.fasterxml</groupId><artifactId>classmate</artifactId><version>1.1.0</version></dependency>

二 编写配置类

package s.s.m.swagger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import com.mangofactory.swagger.configuration.SpringSwaggerConfig;import com.mangofactory.swagger.models.dto.ApiInfo;import com.mangofactory.swagger.plugin.EnableSwagger;import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;@Configuration@EnableSwagger@EnableWebMvc@ComponentScan(basePackages="s.s.m.controller") //添加这个注释,会自动扫描该类中的每一个方法自动生成api文档  public class SwaggerConfig {private SpringSwaggerConfig springSwaggerConfig;/** * Required to autowire SpringSwaggerConfig */@Autowiredpublic void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {this.springSwaggerConfig = springSwaggerConfig;}/** * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc * framework - allowing for multiple swagger groups i.e. same code base * multiple swagger resource listings. */@Beanpublic SwaggerSpringMvcPlugin customImplementation() {return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns(".*?");}private ApiInfo apiInfo() {ApiInfo apiInfo = new ApiInfo("这是一个测试的应用", //应用名称    "内部人员开发文档", //文档名称   "本API是为了解决学习研究的问题",  //概述    "测试开发组", //联系作者  "Licence 2017", //许可证明  "localhost" //url  );return apiInfo;}}

三 spring配置文件添加2个bean

<!-- swagger --><bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" /><bean class="s.s.m.swagger.SwaggerConfig" /> 


四 Controller里添加注解

package s.s.m.controller;import java.io.UnsupportedEncodingException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import s.s.m.service.GoodsService;import com.wordnik.swagger.annotations.Api;import com.wordnik.swagger.annotations.ApiOperation;import com.wordnik.swagger.annotations.ApiParam;@Controller@RequestMapping({"/goods"})@Api(description="商品服务", value = "GoodsController")public class GoodsController {@Autowiredprivate GoodsService goodsService;@ApiOperation(value = "查询商品", notes = "查询全部商品")    @RequestMapping(value = {"/select"}, method = {RequestMethod.GET})    @ResponseBody    public String query(){    return goodsService.query();    }    @ApiOperation(value = "创建商品",notes = "创建商品")    @RequestMapping(value = {"/save"}, method = {RequestMethod.GET})    @ResponseBody    public int save(@ApiParam("商品名称")     @RequestParam(value="goodsName",required=true)     String goodsName) throws UnsupportedEncodingException{    goodsName = new String(goodsName.getBytes("ISO8859-1"),"utf-8");    return goodsService.save(goodsName);    }    @ApiOperation(value = "查询缓存",notes = "根据key查询缓存")    @RequestMapping(value = {"/queryCache"}, method = {RequestMethod.GET})    @ResponseBody    public String queryCache(@ApiParam("key")      @RequestParam(value="key",required=true)      String key){    return goodsService.queryRedis(key);    }}

五 配置swagger-ui



index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"";%><!DOCTYPE html><html><head>  <title>AUTH-APIDOCS</title>  <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>  <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>  <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>  <link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>  <script type="text/javascript" src="lib/shred.bundle.js"></script>  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>  <script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>  <script src='lib/underscore-min.js' type='text/javascript'></script>  <script src='lib/backbone-min.js' type='text/javascript'></script>  <script src='lib/swagger-client.js' type='text/javascript'></script>  <script src='swagger-ui.js' type='text/javascript'></script>  <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>  <script src='lib/marked.js' type='text/javascript'></script>  <!-- enabling this will enable oauth2 implicit scope support -->  <script src='lib/swagger-oauth.js' type='text/javascript'></script>  <script type="text/javascript">    $(function () {      var url = window.location.search.match(/url=([^&]+)/);      if (url && url.length > 1) {        url = decodeURIComponent(url[1]);      } else {        url = "<%=basePath%>/api-docs";      }      window.swaggerUi = new SwaggerUi({        url: url,        dom_id: "swagger-ui-container",        supportedSubmitMethods: ['get', 'post', 'put', 'delete'],        onComplete: function(swaggerApi, swaggerUi){          if(typeof initOAuth == "function") {            /*            initOAuth({              clientId: "your-client-id",              realm: "your-realms",              appName: "your-app-name"            });            */          }          $('pre code').each(function(i, e) {            hljs.highlightBlock(e)          });        },        onFailure: function(data) {          log("Unable to Load SwaggerUI");        },        docExpansion: "none",        sorter : "alpha"      });      function addApiKeyAuthorization() {        var key = $('#input_apiKey')[0].value;        log("key: " + key);        if(key && key.trim() != "") {            log("added key " + key);            window.authorizations.add("api_key", new ApiKeyAuthorization("api_key", key, "query"));        }      }      $('#input_apiKey').change(function() {        addApiKeyAuthorization();      });      // if you have an apiKey you would like to pre-populate on the page for demonstration purposes...      /*        var apiKey = "myApiKeyXXXX123456789";        $('#input_apiKey').val(apiKey);        addApiKeyAuthorization();      */      window.swaggerUi.load();  });  </script></head><body class="swagger-section"><div id='header'>  <div class="swagger-ui-wrap">    <a id="logo" href="<%=basePath%>/index.jsp">swagger</a>    <form id='api_selector'>      <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>      <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>      <div class='input'><a id="explore" href="#">Explore</a></div>    </form>  </div></div><div id="message-bar" class="swagger-ui-wrap"> </div><div id="swagger-ui-container" class="swagger-ui-wrap"></div></body></html>

六 修改web.xml index.jsp使用的资源要使用默认servlet,如一下文件,如果还有404错误,继续添加对应文件使用默认servlet,不要被springmvc拦截

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.ico</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.woff2</url-pattern>
</servlet-mapping>

原创粉丝点击