前言
前一阵写了几个接口,需要给别人出一份接口文档。总觉手写挺麻烦的。看了一下接口入参的bean每个属性都有类似@notNull这样的注解,这种注解是用于接口调用时自动进行校验时用的。想了一下干脆通过扫描接口的参数的这些注解来生成一个文档。于是就写了一个工具类,来生成一个表格形式的接口文档。这个工具不需要启动spring,简单配置两三个参数,直接运行main方法就可以生成。
代码
用于扫描包的工具类:
package com.zbj.finance.member.api.excel;
import java.io.File;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author txf 扫描包的工具类
*/
public class ScannerUtils {
public static Set<String> scanBasePackage(String basePackageName) {
String packageDirName = basePackageName.replace(".", "/");
URL url = Thread.currentThread().getContextClassLoader()
.getResource(packageDirName);
System.out.println("文件路径:" + url);
File targetFile = new File(url.getFile());
if (!targetFile.exists() || targetFile.isFile()) {
throw new RuntimeException(basePackageName + "不是一个包名或者该包名不存在");
}
Set<String> classNames = new HashSet<String>();
getAllClass(targetFile, basePackageName, classNames);
return classNames;
}
/**
* 得到所有在parentFile目录下的class文件名称
*
* @param parentFile
* @param classNames
* @param basePackageName
*/
private static void getAllClass(File parentFile, String basePackageName,
Set<String> classNames) {
File[] files = parentFile.listFiles();
for (File file : files) {
String path = file.getPath();
if (file.isFile()) {
if (path.endsWith(".class")) {
classNames.add(basePackageName
+ "."
+ path.substring(path.lastIndexOf('\\') + 1,
path.lastIndexOf('.')));
}
} else {
basePackageName = basePackageName
+ path.substring(path.lastIndexOf('\\') + 1);
getAllClass(file, basePackageName, classNames);
}
}
}
}
用于生成Excel组装数据的对象:
package com.zbj.finance.member.api.excel;
import java.util.List;
/**
*
* @author txf
* 用于生成sheet的装入数据的对象
*/
public class ExcelSheet {
private String sheetName;
private String note;
private String classPath;
private String requestName;
private String responseName;
private List<String> head;
private List<List<String>> requestDatas;
private List<List<String>> responseDatas;
public String getRequestName() {
return requestName;
}
public void setRequestName(String requestName) {
this.requestName = requestName;
}
public String getResponseName() {
return responseName;
}
public void setResponseName(String responseName) {
this.responseName = responseName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getClassPath() {
return classPath;
}
public void setClassPath(String classPath