其实写接口文档的工具有很多。比如wiki,confluence(这个用的也挺多的。安装步骤可以参见我这篇博客https://blog.csdn.net/qq_29281307/article/details/89345052)
但是总结下来,还是觉得swaggerui比较好用,不仅可以在编程过程中就生成api文档,而且还可以通过swagger调试接口,这对于后台开发人员来说真是太方便了。避免再去通过postman测试的过程。
下面就直接上代码了:
首先pom 文件如下:
io.springfox
springfox-swagger2
${springfox-swagger2.version}
io.springfox
springfox-swagger-ui
${springfox-swagger-ui.version}
其次:编写一个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
*/
public Predicate basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
private Function, 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
为了避免重复造轮子,关于swagger注解的使用就请参见这位大神的博客吧:
https://blog.csdn.net/u014231523/article/details/76522486
另外推荐一篇博客:
SpringBoot中Swagger2多包扫描问题
https://blog.csdn.net/teavamc/article/details/86654456