81,092
社区成员
发帖
与我相关
我的任务
分享
public static void fromRequest(Object target, HttpServletRequest request)
throws Exception {
Class action = target.getClass();
Field[] fields = action.getDeclaredFields();
for (Field field : fields) {
String fieldType = field.getType().getSimpleName();
String fieldValue = request.getParameter(field.getName());
if (fieldValue == null || "".equals(fieldValue))
continue;
Method method = action.getMethod("set"
+ new StringBuffer(field.getName()).replace(0, 1, field
.getName().substring(0, 1).toUpperCase()),
new Class[] { field.getType() });
if (method == null)
continue;
if (fieldType.equals("Integer") || fieldType.equals("String")
|| fieldType.equals("Double")) {
if (fieldValue != null) {
if (fieldType.equals("Integer"))
method.invoke(target, new Object[] { Integer
.parseInt(fieldValue) });
else if (fieldType.equals("Double"))
method.invoke(target, new Object[] { Double
.parseDouble(fieldValue) });
else
method.invoke(target, new Object[] { fieldValue });
}
} else if (fieldType.equals("Date")) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-mm-dd");
Date date = sd.parse(fieldValue);
method.invoke(target,new Object[]{date });
}
}
}
public class A {
private int i;
private long l;
private char c;
private String str;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
public class B {//和类A一模一样
private int i;
private long l;
private char c;
private String str;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public long getL() {
return l;
}
public void setL(long l) {
this.l = l;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
public class Main {
public static void main(String[] args){
A a = new A();
a.setI(1);
a.setL(2L);
a.setC('c');
a.setStr("str");//初始化A
try {
B b = covertA2B(a);
System.out.println(b.getStr());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public static B covertA2B(A a) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
B b = new B();
Class clazz1 = a.getClass();
Field[] fields1 = clazz1.getDeclaredFields();
Class clazz2 = b.getClass();
for(Field field1 : fields1){
System.out.println("field1.getName():"+field1.getName());
String methodName1 = "get"+ new StringBuffer(field1.getName()).replace(0, 1, field1.getName().substring(0, 1).toUpperCase());//构造字段的get方法名
Method method1 = clazz1.getMethod(methodName1);//获得字段的get方法
Object value = method1.invoke(a);//得到字段的值
String methodName2 = "set"+ new StringBuffer(field1.getName()).replace(0, 1, field1.getName().substring(0, 1).toUpperCase());//构造字段的set方法名
Method method2 = clazz2.getMethod(methodName2, new Class[] { field1.getType() });//获得字段的set方法
method2.invoke(b, value);//给字段赋值
}
return b;
}
}