import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import com.howbuy.common.utils.StringUtil;
/**
* @ClassName: ParameterParseUtil
* @Description: 参数解析工具类
* @date 2013-4-25 上午11:09:31
*
*/
public class ParameterParseUtil {
/**
* 将字符串转换成对象
* @param clazz 对象类型
* @param srcStr 源字符串
* @return Object 返回对象
*/
public static Object stringToObject(Class clazz, String srcStr) {
if(null == clazz || StringUtil.isEmpty(srcStr)) {
return null;
}
try {
return fillObjectValue(clazz.newInstance(), srcStr);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* 根据源字符串解析并将值填充对象
* @param obj 返回对象
* @param srcStr 源字符串
* @return Object 返回对象
*/
public static Object fillObjectValue(Object obj, String srcStr) {
if(null == obj || StringUtil.isEmpty(srcStr)) {
return null;
}
try {
Map map = stringToMap(srcStr);
Field []fields = obj.getClass().getDeclaredFields();
for(Field field : fields) {
String fieldName = field.getName();
if("serialVersionUID".equals(fieldName)) {// 过滤掉序列化字段
continue;
}
String value = map.get(fieldName);
Method method = obj.getClass().getMethod("set" + convertFieldName(fieldName), String.class);
method.invoke(obj, value);
}
} catch(Exception ex) {
ex.printStackTrace();
}
return obj;
}
/**
* 将源字符串解析成MAP键值对
* @param srcStr 源字符串
* @return Map MAP键值对
*/
private static Map stringToMap(String srcStr) {
Map valuesMap = new HashMap();
if(StringUtil.isEmpty(srcStr)) {
return valuesMap;
}
String []srcStrArr = srcStr.split("\\|");
for(String str : srcStrArr) {
String []strArr = str.split("=");
String key = strArr[0];
String value = "";
if(strArr.length > 1) {
value = strArr[1];
}
valuesMap.put(key, value);
}
return valuesMap;
}
/**
* 将字段名称首字母转换成大写后返回
* @param fieldName 字段名称
* @return String
*/
private static String convertFieldName(String fieldName) {
if(StringUtil.isEmpty(fieldName)) {
return "";
}
return fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1, fieldName.length());
}
}