链接地址:http://www.xx566.com/detail/157.html
上一篇,Java反射获取Request请求中的参数并封装到指定的JavaBean中,我们通过EasyMock构造了一个测试用的Request对象,并通过解析Request中的参数信息,将参数及参数值封装到相应的JavaBean中,通过上一篇以及更早一篇Java反射解析XML字符串并封装到指定的JavaBean中的工具方法,已经为我们调用接口提供了很大的方便, 但有时候我们也需要将一些JavaBean转换为Map集合用于接口数据的传递或拼接一些xml信息返回给接口。
本篇就旨在解决上述问题,有时候提供了接口的回调方法后,经常需要响应一些xml信息给接口或者传递一些map参数集合等,同样我们通过下面的示例来进行本篇的学习,如下:
package javase.reflect;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
/**
* Java反射获取Request请求中的参数并封装到指定的JavaBean
* User: Realfighter
* Date: 2014/11/2
* Time: 11:35
*/
public class JavaBeanToMap {
private JavaBean user;
@Before
public void setUp() {
user = new JavaBean();
user.setName("Realfighter");
user.setSex("male");
}
@Test
public void testJavaBeanToMap() {
Map<String, String> map = packParams(user);
System.out.println(map);//{sex=male, name=Realfighter}
}
@Test
public void testMapToXmlStr() {
Map<String, String> map = packParams(user);
System.out.println(buildXmlStr(map));
/**
* 输出结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<sex>male </sex>
<name>Realfighter </name>
</root>
*/
}
/**
* 将指定的对象转为Map
*
* @param obj
* @return Map<String,String>
* @Title: packParams
* @author Realfighter
*/
public static Map<String, String> packParams(Object obj) {
Map<String, String> resultMap = new HashMap<String, String>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true); // 设置属性可以访问
String key = field.getName();// 获取属性名
String value = "";// 获取属性的值
try {
value = (String) field.get(obj);
} catch (IllegalArgumentException e) {
continue;
} catch (IllegalAccessException e) {
continue;
}
resultMap.put(key, value);
}
return resultMap;
}
/**
* 构造xml信息
*
* @param map
* @return String
* @throws
* @Title: buildXmlStr
* @author Realfighter
*/
public static String buildXmlStr(Map<String, String> map) {
StringBuffer xmlStr = new StringBuffer();
Object[] keyArray = map.keySet().toArray();
String[] keys = new String[map.keySet().size()];
xmlStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
xmlStr.append("<root>\n");
for (int i = 0; i < keyArray.length; i++) {
keys[i] = keyArray[i].toString();
xmlStr.append("\t<" + keys[i] + ">");
xmlStr.append((String) map.get(keys[i]));
xmlStr.append("\t</" + keys[i] + ">\n");
}
xmlStr.append("</root>");
return xmlStr.toString();
}
}
class JavaBean {
String name;//姓名
String sex;//性别
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
总结:我们首先构造了一个简单的JavaBean对象,通过packParams方法,利用反射获取到相应的属性以及属性值,放入Map集合返回,当我们需要向接口相应xml字符串时,我们可能需要遍历整个Map集合,通过buildXmlStr方法,拼接相应的xml字符串返回。
源码地址:http://git.oschina.net/realfighter/xx566-diary/blob/master/src/javase/reflect/JavaBeanToMap.java