获取java文件字段和注释的对应JSON,用于接口文档编写

接口文档神器

之前写接口文档比较痛苦,每个字段都是一个一个的对写对应的描述,后来我写了个小玩意,有了这个就不头疼了,分享一哈;
直接复制到自己的项目中就可以用了,关于@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":"大货名称"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值