import org.joda.time.DateTime;
public String convertTemplate2Content(String id){
User user = userService.getUserById(id);//演示代码此行可以忽略
String content = "{name}在{date}提交了一份代码,里面第{line}有很多bug";
// 正则表达式 寻找 大括号内的 数据
Pattern pattern = Pattern.compile("(?<=\\{)(.+?)(?=\\})");
Matcher matcher = pattern.matcher(content);
Map<String, Object> map = Bean2Map.beanToMap(user);
// 遍历全文
while (matcher.find()) {
String field = matcher.group();
// 用来替换 {字段} 的正则
String replace = "\\{" + field + "\\}";
Object object = map.get(field);
if (object == null) {
return "数据模板字段输入错误";
}
// 时间类型格式化后转字符串
if (object instanceof java.util.Date) {
Date date = (java.util.Date) object;
object = new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
}
String replaceAll = content.replaceAll(replace, object.toString());
content = replaceAll;
}
return content;
}
/**
* javaBean 转 Map
*
* @param object
* 需要转换的javabean
* @return 转换结果map
* @throws Exception
*/
public static Map<String, Object> beanToMap(Object object) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
Class<? extends Object> cls = object.getClass();
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(object));
}
return map;
}