From 7562724d5f9df38444513d4a6252f7eff550fb1f Mon Sep 17 00:00:00 2001
From: mrz <17966059@qq.com>
Date: Sat, 6 Apr 2019 18:56:58 +0800
Subject: [PATCH] 集成swagger2

---
 pom.xml                                                           | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 readme.md                                                         |  1 +
 src/main/java/com/tianbo/warehouse/Swagger2.java                  | 43 +++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/tianbo/warehouse/controller/UserController.java |  9 +++++++++
 src/test/java/com/tianbo/warehouse/WarehouseApplicationTests.java |  2 ++
 5 files changed, 102 insertions(+), 0 deletions(-)
 create mode 100644 src/main/java/com/tianbo/warehouse/Swagger2.java

diff --git a/pom.xml b/pom.xml
index c01c936..a34dce2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
 		<spring-cloud.version>Greenwich.BUILD-SNAPSHOT</spring-cloud.version>
 		<fastjson_version>1.2.28</fastjson_version>
 		<lombok_sersion>1.18.6</lombok_sersion>
+		<swagger2_version>2.9.2</swagger2_version>
 	</properties>
 
 	<dependencies>
@@ -85,8 +86,54 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
+
 		<!--spring boot-->
 		<!-- tools-->
+		<!--集成swagger2,下面两个spring的配置解决springboot包 与swagger2的包冲突问题,生产部署的时候记得要去掉此swagger2的配置,开发环境开启-->
+		<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
+		<dependency>
+			<groupId>org.springframework.plugin</groupId>
+			<artifactId>spring-plugin-core</artifactId>
+			<version>1.2.0.RELEASE</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.plugin</groupId>
+			<artifactId>spring-plugin-metadata</artifactId>
+			<version>1.2.0.RELEASE</version><!--$NO-MVN-MAN-VER$-->
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>${swagger2_version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework.plugin</groupId>
+					<artifactId>spring-plugin-core</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework.plugin</groupId>
+					<artifactId>spring-plugin-metadata</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>${swagger2_version}</version>
+			<!--2.9.2集成的是M1的这两个包,跟现在用的Greenwich.BUILD-SNAPSHOT的版本的SPRING boot2的版本包有冲突。去掉-->
+			<exclusions>
+				<exclusion>
+					<groupId>org.springframework.plugin</groupId>
+					<artifactId>spring-plugin-core</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.springframework.plugin</groupId>
+					<artifactId>spring-plugin-metadata</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!--集成swagger2-->
 		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
 		<dependency>
 			<groupId>org.projectlombok</groupId>
diff --git a/readme.md b/readme.md
index f17ff33..eb040ec 100644
--- a/readme.md
+++ b/readme.md
@@ -23,3 +23,4 @@
 * 集成lombok,简化部分代码录入,比如实体类,方便实体及表结构修改,敏捷开发必用,使用方法见[lombok集成使用说明](https://jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html)
 )
 * 集成了单文件、多文件上传接口   
+* 集成了swagger2,开发环境开启此POM配置,生产环境记得去掉。包冲突问题看POM配置文件。
\ No newline at end of file
diff --git a/src/main/java/com/tianbo/warehouse/Swagger2.java b/src/main/java/com/tianbo/warehouse/Swagger2.java
new file mode 100644
index 0000000..ed587be
--- /dev/null
+++ b/src/main/java/com/tianbo/warehouse/Swagger2.java
@@ -0,0 +1,43 @@
+package com.tianbo.warehouse;
+
+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.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class Swagger2 {
+    //swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //为当前包路径
+                .apis(RequestHandlerSelectors.basePackage("com.tianbo.warehouse.controller"))
+                .paths(PathSelectors.any())
+                .build();
+    }
+    //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                //页面标题
+                .title("Spring Boot 测试使用 Swagger2 构建RESTful API")
+                //创建人
+                .contact(new Contact("MarryFeng", "http://www.baidu.com", ""))
+                //版本号
+                .version("1.0")
+                //描述
+                .description("API 描述")
+                .build();
+    }
+
+
+}
diff --git a/src/main/java/com/tianbo/warehouse/controller/UserController.java b/src/main/java/com/tianbo/warehouse/controller/UserController.java
index 1a63d79..ae616f1 100644
--- a/src/main/java/com/tianbo/warehouse/controller/UserController.java
+++ b/src/main/java/com/tianbo/warehouse/controller/UserController.java
@@ -7,6 +7,10 @@ import com.tianbo.warehouse.controller.response.ResultJson;
 import com.tianbo.warehouse.model.USERS;
 import com.tianbo.warehouse.model.UserRole;
 import com.tianbo.warehouse.service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -18,11 +22,16 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
 @RestController
+@RequestMapping("/user")
+@Api("swaggerDemoController相关的api")
 public class UserController {
 
     @Autowired
     UserService userService;
 
+    @ApiOperation(value = "查询用户列表及信息", notes = "查询用户列表及单个用户信息")
+    @ApiImplicitParams({@ApiImplicitParam(name = "pageNum", value = "分页-当前页", required = false, dataType = "int",defaultValue = "1"),
+            @ApiImplicitParam(name = "pageSize", value = "分页-每页显示多少条", required = false, dataType = "int",defaultValue = "5")})
     @GetMapping("/user/list")
     public PageInfo<USERS> list(@RequestParam(value = "pageNum",required = false,defaultValue = "1")
                                         int pageNum,
diff --git a/src/test/java/com/tianbo/warehouse/WarehouseApplicationTests.java b/src/test/java/com/tianbo/warehouse/WarehouseApplicationTests.java
index 6fcc20c..b5b1e9f 100644
--- a/src/test/java/com/tianbo/warehouse/WarehouseApplicationTests.java
+++ b/src/test/java/com/tianbo/warehouse/WarehouseApplicationTests.java
@@ -4,8 +4,10 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
 
 @RunWith(SpringRunner.class)
+@WebAppConfiguration
 //解决mvn clean package打包项目websocketjavax.websocket.server.ServerContainer not available报错的问题
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class WarehouseApplicationTests {
--
libgit2 0.24.0