公衆號: java樂園html
Spring Cloud將服務註冊到了Eureka上,能夠從Eureka的UI界面中,看到有哪些服務已經註冊到了Eureka Server上;可是若是想查看當前服務提供了哪些RESTful接口方法的話,就沒法從Eureka Server獲取了,而傳統的方法是梳理一個接口文檔來供開發人員之間來進行交流。這種狀況下常常會形成文檔和代碼的不一致性,好比說代碼改了,可是接口文檔還沒來得及修改等問題,而Swagger2則給咱們提供了一套完美的解決方案,下面來看看Swagger2是如何來解決這個問題的。java
一、新建項目sc-swagger2,對應的pom.xml文件web
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring-cloud</groupId> <artifactId>sc-swagger2</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sc-swagger2</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
二、新建springboot啓動類spring
package sc.swagger2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Swagger2Application { public static void main(String[] args) { SpringApplication.run(Swagger2Application.class, args); } }
三、新建Swagger2配置類apache
package sc.swagger2.config; 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 Swagger2Config { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("sc.swagger2")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Spring Boot中使用Swagger2構建RESTful APIs") .description("更多Spring Boot相關文章請關注: JAVA樂園 公衆號") .termsOfServiceUrl("https://edu.csdn.net/lecturer/995") .contact(new Contact("huangjinjin", // "https://edu.csdn.net/lecturer/995",// "happyhuangjinjin@sina.com")) .version("1.0") .build(); } }
四、新建一個模擬的Controllerapi
package sc.swagger2.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import sc.swagger2.model.User; @Api(value="用戶管理") @Controller public class UserController { @ApiResponses({ @ApiResponse(code = 000000, message = "操做成功"), @ApiResponse(code = 000001, message = "服務器內部異常") }) @GetMapping(value = "/feign/user/getUser/{id}") @ResponseBody @ApiOperation(value = "獲取根據Id用戶信息",response = User.class) @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long",example="100") public Map<String, Object> getUser(@PathVariable Long id) { Map<String, Object> result = new HashMap<String, Object>(); result.put("code", "000000"); result.put("msg", "success"); User u = new User(); u.setId(1L); u.setAge(23); u.setUserName("huangjinjin"); u.setPosition("cto"); result.put("body", u); return result; } @ApiResponses({ @ApiResponse(code = 000000, message = "操做成功"), @ApiResponse(code = 000001, message = "服務器內部異常") }) @RequestMapping(value = "/feign/user/listUser", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "獲取用戶列表") public Map<String, Object> listUser() { Map<String, Object> result = new HashMap<String, Object>(); result.put("code", "000000"); result.put("msg", "success"); User u = new User(); u.setId(1L); u.setAge(23); u.setUserName("huangjinjin"); u.setPosition("cto"); List<User> list = new ArrayList<User>(); list.add(u); result.put("body", list); return result; } @ApiResponses({ @ApiResponse(code = 000000, message = "操做成功"), @ApiResponse(code = 000001, message = "服務器內部異常") }) @PostMapping(value = "/feign/user/addUser") @ResponseBody @ApiOperation(value = "添加用戶", notes = "根據User對象建立用戶") @ApiImplicitParams({ @ApiImplicitParam(name = "userName", value = "用戶名", required = true, dataType = "String"), @ApiImplicitParam(name = "age", value = "年齡", required = true, dataType = "String"), @ApiImplicitParam(name = "position", value = "職位", required = true, dataType = "String"), @ApiImplicitParam(name = "id", value = "用戶ID", required = false, dataType = "Long",example="100")}) public Map<String, Object> addUser(User user) { Map<String, Object> result = new HashMap<String, Object>(); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 1); return result; } @ApiResponses({ @ApiResponse(code = 000000, message = "操做成功"), @ApiResponse(code = 000001, message = "服務器內部異常") }) @ApiOperation(value = "更新用戶") @PutMapping(value = "/feign/user/updateUser") @ResponseBody @ApiImplicitParams({ @ApiImplicitParam(name = "userName", value = "用戶名", required = true, dataType = "String"), @ApiImplicitParam(name = "age", value = "年齡", required = true, dataType = "String"), @ApiImplicitParam(name = "position", value = "職位", required = true, dataType = "String"), @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long", example="100")}) public Map<String, Object> updateUser(User user) { Map<String, Object> result = new HashMap<String, Object>(); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 1); return result; } @ApiResponses({ @ApiResponse(code = 000000, message = "操做成功"), @ApiResponse(code = 000001, message = "服務器內部異常") }) @DeleteMapping(value = "/feign/user/deleteUser/{id}") @ResponseBody @ApiOperation(value = "刪除用戶") @ApiImplicitParam(name = "id", value = "用戶ID", required = true, dataType = "Long",example="100") public Map<String, Object> deleteUser(@PathVariable Long id) { Map<String, Object> result = new HashMap<String, Object>(); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 1); return result; } }
五、新建User模型類springboot
package sc.swagger2.model; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @ApiModel public class User implements Serializable { private static final long serialVersionUID = 4639927446947303736L; @ApiModelProperty(name="id", dataType="Long", value="主鍵ID") private Long id; @ApiModelProperty(name="userName", dataType="String", value="姓名", required=true) private String userName; @ApiModelProperty(name="age", dataType="String", value="年齡", required=true) private Integer age; @ApiModelProperty(name="position", dataType="String", value="職位") private String position; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
六、啓動sc-swagger2項目,並驗證是否啓動成功
方式一:查看日誌服務器
方式二:訪問地址
http://127.0.0.1:9092/swagger-ui.htmlapp
或者訪問http://localhost:9092/v2/api-docsmaven
七、在界面http://127.0.0.1:9092/swagger-ui.html點擊【user-controller】能夠看到全部的接口,同時也能夠在界面上進行接口調用調試