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;
}
}