java根据实体类获取注释和field属性值生成js DataTable

30 篇文章 0 订阅
6 篇文章 0 订阅

 

java根据实体类获取注释和field属性值生成js DataTable

 

需求:

把oss-service层拿到的实体,提取出注释和filed

把实体类丢在工具类的相同目录即可,与文件名称无关,模糊读取

 

效果:

生成的js DataTable 的对象数组JSON对象list为

{'title':' ID,'column':'id'},
{'title':' 代理商名称,'column':'proxyName'},
{'title':' 代理商编号,'column':'proxyCode'},
{'title':' 代理商是否停用状态码(默认0,0未停用、1停用、其他待定),'column':'state'},
{'title':' 创建时间,'column':'createdAt'},
{'title':' 创建人,'column':'createdBy'},
{'title':' 更新时间,'column':'updatedAt'},
{'title':' 更新人,'column':'updatedBy'},

需要提取注释和field定义生成json的实体类为:

package com.xx.auto.template_oss_web;

import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 商户代理商(银联认证支付商户代理)实体
 * @author xx
 * @version Id: OssCustProxyInfoResponse.java , 2018-07-19 16:32  xx Exp $
 */
@Data
@ToString(callSuper = true)
public class OssCustProxyInfoResponse implements Serializable {


    private static final long serialVersionUID = 526719642955924225L;
    /**
     * ID
     */
    private Long id;


    /**
     * 代理商名称
     */
    private String  proxyName;

    /**
     * 代理商编号
     */
    private String   proxyCode;

    /**
     * 代理商是否停用状态码(默认0,0未停用、1停用、其他待定)
     */
    private String  state;

    /**
     * 创建时间
     */
    private Date createdAt;

    /**
     * 创建人
     */
    private String createdBy;

    /**
     * 更新时间
     */
    private Date updatedAt;

    /**
     * 更新人
     */
    private String updatedBy;
}

 

工具类为:

package com.william.auto.temp_help.template_oss_web;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 通过类实体获取DataTable
 * @author xx
 * @version Id: GetDataTableByEntity.java , 2018-08-04 21:41  xx Exp $
 */
public class GetDataTableByEntity {

    static Logger logger = Logger.getLogger(GetDataTableByEntity.class.getClass().getSimpleName());

    public static void main(String args[]) throws  Exception{
        doSomeThing();
    }

    public static String doSomeThing() throws IOException {
        StringBuilder outputSb = new StringBuilder();

        //读文件
        File directory = new File("F:\\study\\project\\noUsage\\codeGenerator\\dedd\\com.william\\src\\main\\java\\com\\william\\auto\\temp_help\\template_oss_web");
        for (File tempFile : directory.listFiles()) {
            if (tempFile.getName().indexOf(".xml") != -1) {
                FileReader fileReader = new FileReader(tempFile);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String s = null;
                StringBuilder sb = new StringBuilder();
                while(( s = bufferedReader.readLine() ) != null ) {
                    //System.out.println(s);
                    sb.append(s);
                }

                List<String> annoList = getRegexAnnotationExp("\\/\\*([^\\*^\\/]*|[\\*^\\/*]*|[^\\**\\/]*)*\\*\\/",sb);
                List<String> fieldList = getRegexFieldExp("private\\s+([a-zA-Z]*)*\\s+([a-zA-Z]*)*",sb);

                for (int i=0;i<fieldList.size();i++) {
                    if (fieldList.size() > i) {
                        if (fieldList.get(i).equalsIgnoreCase("final")) {
                            continue;
                        }

                        //{'title': '选择', 'column': 'id'},
                        String item = "{'title':'"+annoList.get(i)+",'column':'"+fieldList.get(i)+"'},";
                        outputSb.append(item+"\n");
                        //System.out.println(item);
                    }
                }

                //输出结果
                System.out.println(outputSb.toString());
            }
        }
        return outputSb.toString();
    }


    /**
     * 读取注释文字
     * @param regexExp
     * @param sb
     */
    private static List<String> getRegexAnnotationExp(String regexExp, StringBuilder sb) {
        List<String> resultList = new ArrayList<String>();

        Pattern pattern = Pattern.compile(regexExp);
        String searchPlainText = sb.toString();
        Matcher matcher = pattern.matcher(searchPlainText);
        while (matcher.find()) {
            String groupExp = matcher.group(0).replaceAll("/\\*+\\s+\\*","").replaceAll("\\s+\\*/","");
            resultList.add(groupExp);
            //System.out.println("匹配到:"+groupExp+"  位置:(" + matcher.start()+","+matcher.end()+")");
        }
        return resultList;
    }

    /**
     * 读取属性field
     * @param regexExp
     * @param sb
     */
    private static List<String> getRegexFieldExp(String regexExp,StringBuilder sb) {
        List<String> resultList = new ArrayList<String>();

        Pattern pattern = Pattern.compile(regexExp);
        String searchPlainText = sb.toString();
        Matcher matcher = pattern.matcher(searchPlainText);
        while (matcher.find()) {
            String groupExp = matcher.group(0).replaceAll("private\\s+([a-zA-Z]*)*\\s+","");
            resultList.add(groupExp);
            //System.out.println("匹配到:"+groupExp+"  位置:(" + matcher.start()+","+matcher.end()+")");
        }
        return resultList;
    }

}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值