Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。整體目標是使客戶端和文件系統做爲服務器以一樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,容許API與接口方法,參數等保存同步,大大減小了接口開發人員的工做量.這個例子是我本地運行正常的,完整demo在文章最後。html
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.4.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.6.3</version> </dependency>
<!-- 激活@controller模式 --> <mvc:annotation-driven /> <!-- 配置包掃描位置(會在此包下掃描@controller控制器) --> <context:component-scan base-package="com.scan,com.bean" /> <!-- swagger靜態文件路徑 --> <mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/" cache-period="31556926"/> <mvc:default-servlet-handler /> <bean class="com.scan.config.SwaggerConfig" />
package com.scan.config; import com.google.common.base.Predicate; 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 org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; 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; import java.util.List; import static com.google.common.base.Predicates.or; import static com.google.common.collect.Lists.newArrayList; @Configuration @EnableSwagger2 @ComponentScan(basePackages = {"com.scan.controller"}) @EnableWebMvc public class SwaggerConfig extends WebMvcConfigurationSupport { @Bean public Docket customDocket() { // return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()); } private ApiInfo apiInfo() { Contact contact = new Contact("老王", "https://www.baidu.me", "baidu_666@icloud.com"); return new ApiInfo("Blog前臺API接口",//大標題 title "Swagger測試demo",//小標題 "0.0.1",//版本 "www.baidu.com",//termsOfServiceUrl contact,//做者 "Blog",//連接顯示文字 "https://www.baidu.me"//網站連接 ); } }
@Controller @RequestMapping("/userController") @Api(tags = "二:用戶信息") //swagger分類標題註解 public class UserController { @RequestMapping(value = "/listCompound", method = RequestMethod.GET) @ResponseBody
//swagger返回值註解 @ApiResponses(value = { @ApiResponse(code = 500, message = "系統錯誤"), @ApiResponse(code = 200, message = "0 成功,其它爲錯誤,返回格式:{code:0,data[{}]},data中的屬性參照下方Model", response = UserVo.class) }) @ApiOperation(httpMethod = "GET", value = "我的信息")//swagger 當前接口註解 public String listCompound( @ApiParam(required = true, name = "start", value = "start") int start, int limit, @ApiParam(required = false, name = "userName", value = "名稱模糊查詢") String userName) { List<UserVo> data = new ArrayList<UserVo>(); String msg = data.size() > 0 ? "" : "沒有查詢到相關記錄"; Result result = new Result(); result.setMsg(msg); result.setCode(0); result.setData(data); return JSONObject.toJSONString(result); }
第五步:下載swaggerUi,將下載後的文件解壓,將dist目錄下的文件,複製到webapp下的swagger目錄中(這個目錄的名字自定義,但要和spring-servert.xml中(<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/") 的名稱要一致,修改index.html中文檔加載的地址.java
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
//url: "http://petstore.swagger.io/v2/swagger.json",
url:"http://127.0.0.1:8080/swagger-spring/v2/api-docs.do",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
若是以上配置正確,在瀏覽器中輸入http://127.0.0.1:8080/swagger-spring/swagger/index.html,將會出現以下界面:git
一、與模型相關的註解,用在bean上面github
@ApiModel:用在bean上,對模型類作註釋;web
@ApiModelProperty:用在屬性上,對屬性作註釋spring
二、與接口相關的註解json
@Api:用在controller上,對controller進行註釋;api
@ApiOperation:用在API方法上,對該API作註釋,說明API的做用;瀏覽器
@ApiImplicitParams:用來包含API的一組參數註解,能夠簡單的理解爲參數註解的集合聲明; 服務器
@ApiImplicitParam:用在@ApiImplicitParams註解中,也能夠單獨使用,說明一個請求參數的各個方面,該註解包含的經常使用選項有:
paramType:參數所放置的地方,包含query、header、path、body以及form,最經常使用的是前四個。
name:參數名;
dataType:參數類型,能夠是基礎數據類型,也能夠是一個class;
required:參數是否必須傳;
value:參數的註釋,說明參數的意義;
defaultValue:參數的默認值;
@ApiResponses:一般用來包含接口的一組響應註解,能夠簡單的理解爲響應註解的集合聲明;
@ApiResponse:用在@ApiResponses中,通常用於表達一個響應信息
code:即httpCode,例如400
message:信息,例如"操做成功"
response = UserVo.class 這裏UserVo是一個配置了@ApiModel註解的對像,該是對像屬性已配置 @ApiModelProperty,swagger能夠經過這些配置,生 成接口返回值