1、用于ObjectBean的变量注解
@Retention(RUNTIME)
@Target(ElementType.FIELD)
public @interface BeanFormat {
String name() default "field";
}
2、用于测试的ObjectBean,bean的变量使用前面定义的注解
public class TestBean {
@BeanFormat(name="用户名*")
private String name;
@BeanFormat(name="性别*")
private String gender = "";
@BeanFormat(name="生日*")
private String birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
@Override
public String toString() {
return "TestBean{" +
"name='" + name + '\'' +
", gender=" + gender +
", birth='" + birth + '\'' +
'}';
}
}
3、测试Xml转Object和Object转Xml
import com.goldpac.vtm.business.modules.api.annotations.BeanFormat;
import com.goldpac.vtm.business.modules.api.pojo.vo.TestBean;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class BeanFormatUtil {
/**
* 首字母大写
* @param a
* @return
*/
public static String firstWordUpperCase(String a){
char[] chars = a.toCharArray();
if (chars[0] >= 'a' && chars[0] <= 'z'){
chars[0] = (char) (chars[0] -32);
}
return new String(chars);
}
/**
* 对象转xml
* @param obj
* @return
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static String obj2Xml(Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<?> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (Field declaredField : declaredFields) {
if (declaredField.isAnnotationPresent(BeanFormat.class)){
//获取注解名
String name = declaredField.getAnnotation(BeanFormat.class).name();
//获取字段名
String fieldName = declaredField.getName();
//获取字段类型
// Type genericType = declaredField.getGenericType();
// String typeName = genericType.getTypeName();
//获取get方法
Method getMethod = null;
try {
getMethod = clazz.getMethod("get"+firstWordUpperCase(fieldName));
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
continue;
}
Object getResult = getMethod.invoke(obj);
sb.append("<");
sb.append(name);
sb.append(">");
sb.append(getResult == null ? "":getResult);
sb.append("</");
sb.append(name);
sb.append(">");
}
}
return sb.toString();
}
/**
* xml转对象
* @param xml
* @param obj
* @return
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static Object xml2Obj(String xml, Object obj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<?> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
int i , j , n;
String re;
for (Field declaredField : declaredFields) {
if (declaredField.isAnnotationPresent(BeanFormat.class)){
//获取注解名
String name = declaredField.getAnnotation(BeanFormat.class).name();
//获取字段名
String fieldName = declaredField.getName();
//获取字段类型
Class<?> type = declaredField.getType();
i = xml.indexOf("<" + name + ">");
j = xml.indexOf("</" + name + ">");
n = name.length();
if (i >= 0 && j > i) {
re = xml.substring(i + n + 2, j);
}else {
continue;
}
//获取get方法
Method setMethod;
try {
setMethod = clazz.getMethod("set"+firstWordUpperCase(fieldName),type);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
continue;
}
setMethod.invoke(obj,re);
}
}
return obj;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
// TestBean testBean = new TestBean();
// testBean.setGender("女");
// testBean.setName("张女士");
//// testBean.setBirth(DateUtil.nowTimestamp());
// String s = obj2Xml(testBean);
// System.out.println(s);
String xml = "<用户名*>张女士</用户名*><生日*></生日*>";
TestBean testBean = new TestBean();
TestBean o = (TestBean)xml2Obj(xml, testBean);
System.out.println(o.toString());
}
}
4、Xml取值
// 取XML域的值
public static String getxml(String xml, String fd) {
int i = xml.indexOf("<" + fd + ">"), j = xml.indexOf("</" + fd + ">"), n = fd.length();
String re = "";
if (i >= 0 && j > i)
re = xml.substring(i + n + 2, j);
return re.trim();
}