接口文档神器
之前写接口文档比较痛苦,每个字段都是一个一个的对写对应的描述,后来我写了个小玩意,有了这个就不头疼了,分享一哈;
直接复制到自己的项目中就可以用了,关于@Slf4j
注解,有的小伙伴不需要可以去掉(同时也要去掉log哦),并不影响执行
package com.xxx.xxx.util;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
/**
* <p>
* 使用当前工具类在理想情况下可以构建字段名与注释的匹配json。
* 用于编写接口文档时。甚至可以直接导入。
* 仅作为开发中工具,不保证稳定和准确性,不可用于生产。
* 理论上可以使用,仅供参考;
* 案例:
* public static void main(String[] args) {
* GetFieldDescJsonUtil.printJsonAtConsole("AAA");
* }
* <p>
*
* @author liuxx
* @date 2020年9月9日
*/
@Slf4j
public class GetFieldDescJsonUtil {
/**
* 文件路径
*/
private static String targetPath = null;
/**
* 在控制台打印json
*/
public static void printJsonAtConsole(String javaFileName) {
log.info(getJson(javaFileName));
}
/**
* @param javaFileName java类名称。例如AAA.java 只需传入AAA即可
*/
private static String getJson(String javaFileName) {
//获得java文件路径
File file = new File(System.getProperty("user.dir"));
javaFileName += ".java";
setTargetPath(file, javaFileName);
if (targetPath == null) {
log.error("{}--该类名无法找到对应的文件", javaFileName);
return null;
}
//解析文件
HashMap<String, String> map = new HashMap<>();
try {
try (BufferedReader br = new BufferedReader(new FileReader(targetPath))) {
String line = null;
while ((line = br.readLine()) != null) {
String trim = line.trim();
if (trim.startsWith("private") && !trim.contains("static")) {
String[] s = trim.split(" ");
String s1 = s[s.length - 1];
String replace = s1.replace(";", "");
map.put(replace.trim(), map.get("TEMP"));
map.remove("TEMP");
}
if (trim.contains("//")) {
map.put("TEMP", trim.replace("//", ""));
} else if (trim.startsWith("*") && !trim.contains("*/") && !trim.contains("@")) {
String replace = trim.replace("*", "");
if (!"".equals(replace)) {
map.put("TEMP", replace.trim());
}
}
}
}
map.remove("TEMP");
} catch (Exception e) {
log.error("解析文件发生异常:", e);
}
return JSON.toJSONString(map);
}
/**
* 对文件路径进行赋值
*/
private static void setTargetPath(File file, String javaFileName) {
if (targetPath != null || file.getName().contains(".git") || file.getName().contains(".idea") || file.getName().contains("target")) {
return;
}
if (!file.isDirectory() && file.getName().equals(javaFileName)) {
targetPath = file.getPath();
return;
}
File[] files = file.listFiles();
if (files != null) {
for (File file1 : files) {
if (file1.isDirectory()) {
setTargetPath(file1, javaFileName);
} else {
if (file1.getName().equals(javaFileName)) {
targetPath = file1.getPath();
break;
}
}
}
}
}
private GetFieldDescJsonUtil() {
throw new IllegalStateException("Utility class");
}
}
可以样使用:
输出的JSON:
{
"goodsNo":"款号",
"thirdLevel":"三级分类",
"year":"年份",
"salePrice":"线上销售价",
"firstLevel":"一级分类",
"basicBrandId":"品牌ID",
"productName":"产品名称",
"colorList":"颜色列表",
"secondLevel":"二级分类",
"productImages":"产品图片",
"basicBrandName":"品牌名称",
"enable":"1-上架 0-下架",
"season":"季节",
"settlementPrice":"结算价",
"productUrl":"产品链接",
"goodsName":"大货名称"
}