SpringMvc 集成构建 Swagger

Springmvc项目中集成Swagger。

步骤

一,

maven的pom片段:   下面的swagger 1 与 swagger 2 的配置都可以, 参照一部分就可以,都能跑起来。

————————————————————————————————

<!-- swagger 1 -->

<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-springmvc</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依赖spring-web 3.*.*, 与原工程spring-web:4.3.9冲突,排除原来的依赖版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-models</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依赖spring-web 3.*.*, 与原工程spring-web:4.3.9冲突,排除原来的依赖版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.wordnik</groupId>
   <artifactId>swagger-annotations</artifactId>
   <version>1.3.11</version>
   <!-- swagger-springmvc 依赖spring-web 3.*.*, 与原工程spring-web:4.3.9冲突,排除原来的依赖版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!-- swagger-springmvc dependencies -->
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.5.4</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.5.4</version>
</dependency>
<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>15.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml</groupId>
   <artifactId>classmate</artifactId>
   <version>1.1.0</version>
</dependency>

<!-- swagger 2 -->
<dependency>
   <groupId>com.mangofactory</groupId>
   <artifactId>swagger-springmvc</artifactId>
   <version>1.0.2</version>
   <!-- swagger-springmvc 依赖spring-web 3.*.*, 与原工程spring-web:4.3.9冲突,排除原来的依赖版本 -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.5.1</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.5.1</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.6.0</version>
</dependency>

————————————————————————————————

二,

springmvc的xml文件中加入以下配置。

1, 注册Swagger相关类文件。

<!-- 将 springSwaggerConfig加载到spring容器 -->
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
<!-- 将自定义的swagger配置类加载到spring容器 -->
<bean class="com.zstimes.riskManage.util.controller.SwaggerConfig" />

————————————————————————————————

2,对静态访问的配置,不被springmvc所拦截。

<!-- 对静态资源文件的访问 -->
<mvc:resources mapping="/swagger/**" location="/swagger/" />

————————————————————————————————

三,创建Swagger配置类,SwaggerConfig.java, 与容器定义的bean路径(上面二的部分)要保持一致。 还有一个测试的Controller类。

SwaggerConfig.java:

package com.zstimes.riskManage.util.controller;

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;

/**
 * Created by zzd on 2018/4/15.
 */
public class SwaggerConfig {

    private SpringSwaggerConfig springSwaggerConfig;

    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public 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.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                .apiInfo(apiInfo())
                .includePatterns(".*?");
    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "Swagger",
                "SpringMvc-API swagger测试",
                "Apps API",
                "RTHD",
                "web app",
                "Apps API License URL");
        return apiInfo;
    }
}

Controller片段:

@Api(value = "user")
@Controller
@RequestMapping("/user")
public class UserController extends AbstractBaseController{
	private static final Logger LOGGER = LogUtil.get();
	

	@Autowired
	private BenQiYeService benQiYeService;

	/**
	 * 
	 * @Title: find 
	 * @Description: 测试
	 * @param req
	 * @return
	 * @return: AjaxResult
	 */
	@RequestMapping(value = "/findPageByCondition",produces = "application/json;charset=UTF-8")
	@ResponseBody
	@ApiOperation(value = "CESI",HhttpMethod="POST",notes="get user by id")


四, 与Swagger-UI整合 

配置了扫描哪些接口,Swagger会把这些接口生成json格式的文档,json文档直接看很不人性化,所以用这个Swagger-UI把json格式的文档转成页面! 

1)Swagger-UI官网git下载版本2.10:

下载地址:https://github.com/swagger-api/swagger-ui/tree/v2.2.10

其他版本没都试过, 版本不对会出现以下问题: 页面正常显示,但是就不出现接口文档,然后下面是这句话。

 No operations defined in spec!



下载这里面的dist文件夹,把文件夹整个拷贝到你项目工程的webapp的swagger下,swagger自己创建的,这个目录可以自行定义。
2)找到dist文件夹下的index.html文件,把大概第40行的url改成url = “http://localhost:8080/项目名称/api-docs”;注意这个api-docs是固定的,不要改! 


五,启动项目 

浏览器输入http://域名:端口/项目名/dist/index.html 就看到效果了,成功!





整合时遇到的问题:

1,因为是集成到现有的项目中,现有的项目的spring-web是4.3.9, 但是Swagger-springmvc依赖是的spring-web3.*.*的jar,所以exclusion排除一下。

2,就是整合Swagger-UI的时候发生版本上面说的问题。 目前用的版本是 v2.2.10


发布了20 篇原创文章 · 获赞 16 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章