Explorar el Código

增加swagger接口文档生成

shuzheng hace 9 años
padre
commit
7e4e67773a

+ 15 - 0
springboot/pom.xml

@@ -25,23 +25,38 @@
 	</properties>
 
 	<dependencies>
+		<!-- boot -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter</artifactId>
 		</dependency>
+		<!-- test -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<!-- web -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
 		</dependency>
+		<!-- thymeleaf -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-thymeleaf</artifactId>
 		</dependency>
+		<!-- swagger2 -->
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.2.2</version>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 39 - 0
springboot/src/main/java/com/zheng/springboot/Swagger2.java

@@ -0,0 +1,39 @@
+package com.zheng.springboot;
+
+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.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * Created by ZhangShuzheng on 2016/11/17.
+ */
+@Configuration
+@EnableSwagger2
+public class Swagger2 {
+
+	@Bean
+	public Docket createRestApi() {
+		return new Docket(DocumentationType.SWAGGER_2)
+				.apiInfo(apiInfo())
+				.select()
+				.apis(RequestHandlerSelectors.basePackage("com.zheng.springboot.web"))
+				.paths(PathSelectors.any())
+				.build();
+	}
+	private ApiInfo apiInfo() {
+		return new ApiInfoBuilder()
+				.title("Spring Boot中使用Swagger2构建RESTful APIs")
+				.description("更多Spring Boot相关文章请关注:http://www.zhangshuzheng.cn/")
+				.termsOfServiceUrl("http://www.zhangshuzheng.cn/")
+				.contact("shuzheng")
+				.version("1.0")
+				.build();
+	}
+
+}

+ 7 - 2
springboot/src/main/java/com/zheng/springboot/web/HelloController.java

@@ -1,8 +1,11 @@
 package com.zheng.springboot.web;
 
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
 /**
  * Created by ZhangShuzheng on 2016/11/16.
@@ -10,9 +13,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 @Controller
 public class HelloController {
 
-	@RequestMapping("/index")
+	@ApiOperation(value="测试首页", notes="测试首页get请求")
+	@ApiImplicitParam(name = "map", value = "ModelMap实体map", required = false, dataType = "ModelMap")
+	@RequestMapping(value = "/index", method = RequestMethod.GET)
 	public String index(ModelMap map) {
-		map.addAttribute("host", "http://blog.didispace.com");
+		map.addAttribute("host", "http://www.zhangshuzheng.cn");
 		return "/index";
 	}
 

+ 19 - 16
springboot/src/main/java/com/zheng/springboot/web/UserController.java

@@ -1,6 +1,9 @@
 package com.zheng.springboot.web;
 
 import com.zheng.springboot.domain.User;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
@@ -15,42 +18,42 @@ public class UserController {
 	// 创建线程安全的Map
 	static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
 
-	@RequestMapping(value="/", method= RequestMethod.GET)
+	@ApiOperation(value="获取用户列表", notes="")
+	@RequestMapping(value={""}, method=RequestMethod.GET)
 	public List<User> getUserList() {
-		// 处理"/users/"的GET请求,用来获取用户列表
-		// 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递
 		List<User> r = new ArrayList<User>(users.values());
 		return r;
 	}
-
-	@RequestMapping(value="/", method=RequestMethod.POST)
-	public String postUser(@ModelAttribute User user) {
-		// 处理"/users/"的POST请求,用来创建User
-		// 除了@ModelAttribute绑定参数之外,还可以通过@RequestParam从页面中传递参数
+	@ApiOperation(value="创建用户", notes="根据User对象创建用户")
+	@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
+	@RequestMapping(value="", method=RequestMethod.POST)
+	public String postUser(@RequestBody User user) {
 		users.put(user.getId(), user);
 		return "success";
 	}
-
+	@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
+	@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
 	@RequestMapping(value="/{id}", method=RequestMethod.GET)
 	public User getUser(@PathVariable Long id) {
-		// 处理"/users/{id}"的GET请求,用来获取url中id值的User信息
-		// url中的id可通过@PathVariable绑定到函数的参数中
 		return users.get(id);
 	}
-
+	@ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path"),
+			@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
+	})
 	@RequestMapping(value="/{id}", method=RequestMethod.PUT)
-	public String putUser(@PathVariable Long id, @ModelAttribute User user) {
-		// 处理"/users/{id}"的PUT请求,用来更新User信息
+	public String putUser(@PathVariable Long id, @RequestBody User user) {
 		User u = users.get(id);
 		u.setName(user.getName());
 		u.setAge(user.getAge());
 		users.put(id, u);
 		return "success";
 	}
-
+	@ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
+	@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
 	@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
 	public String deleteUser(@PathVariable Long id) {
-		// 处理"/users/{id}"的DELETE请求,用来删除User
 		users.remove(id);
 		return "success";
 	}