其實寫接口文檔的工具有很多。比如wiki,confluence(這個用的也挺多的。安裝步驟可以參見我這篇博客https://blog.csdn.net/qq_29281307/article/details/89345052)
但是總結下來,還是覺得swaggerui比較好用,不僅可以在編程過程中就生成api文檔,而且還可以通過swagger調試接口,這對於後臺開發人員來說真是太方便了。避免再去通過postman測試的過程。
下面就直接上代碼了:
首先pom 文件如下:
<!--swagger2 start-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-swagger-ui.version}</version>
</dependency>
<!--swagger2 end-->
其次:編寫一個SwaggerUiConfig的類來配置swagger
package com.lenovoedu.admin.config;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Function;
import com.lenovoedu.admin.sys.constants.CommonConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
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;
import java.util.ArrayList;
@Configuration
@EnableSwagger2
public class Swagger2Config {
// 定義分隔符,配置Swagger多包
private static final String splitor = ";";
@Bean
public Docket customDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(basePackage(CommonConstants.SWAGGER_SCAN_BASE_PACKAGE + splitor + "com.lenovoedu.shiro.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
Contact contact = new Contact("YuanGL", "http://edu.lenovo.com", "[email protected]");
return new ApiInfo("聯想教育平臺API接口", //大標題
"聯想教育平臺《權限系統》API接口", //小標題
"2.0.0", //版本
"http://edu.lenovo.com", //服務條款URL
contact, //作者
"聯想教育", //鏈接顯示文字
"http://edu.lenovo.com", //網站鏈接
new ArrayList<>()
);
}
/**
* 重寫basePackage方法,使能夠實現多包訪問,複製貼上去
* @author teavamc
* @date 2019/1/26
* @param basePackage 基礎包
* @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
*/
public Predicate<RequestHandler> basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
private Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
return input -> {
// 循環判斷匹配
for (String strPackage : basePackage.split(splitor)) {
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
};
}
private Optional<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
}
至此swagger就已經配置完畢可以使用了。
如果項目中用的是shiro做權限認證的話,放行swagger需要配置以下參數:
filterMap.put("/swagger-ui.html", "anon");
filterMap.put("/swagger-resources/**", "anon");
filterMap.put("/v2/**", "anon");
filterMap.put("/webjars/**", "anon");
接下來就是swagger的使用了:在接口類和方法上加上相應的註解就可以了
@Api
@ApiOperation(value = "菜單列表分頁", notes = "分頁查詢菜單列表接口")
@ApiImplicitParams({ @ApiImplicitParam(name = "pageInfo<SysMenu>", value = "分頁對象", required = true, paramType = "body", dataType = "PageInfo<SysMenu>") })
爲了避免重複造輪子,關於swagger註解的使用就請參見這位大神的博客吧:
https://blog.csdn.net/u014231523/article/details/76522486
另外推薦一篇博客:
SpringBoot中Swagger2多包掃描問題