org.apache.http.message.BasicNameValuePair是apache-mime4j-0.5.jar开源包中类,主要是封装网络传输参数的。
如果不用可以不用以下方法:
public static ArrayList<BasicNameValuePair> getHttpParamsByBean(Object bean)
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.gzi.helper.Utils;
public class UtilJSON extends BeanUtils {
private static class JSONHolder {
public boolean isHttpParam = true;
public boolean isList = false;
public String httpParamName;
public Class listClass;
public JSONHolder(Field field) {
// 根据注释获取属性对应的列名
JSON json = field.getAnnotation(JSON.class);
if (json != null) {
if (!json.value().equals(JSON.defaultHttpParamName))
httpParamName = json.value();
else
httpParamName = field.getName();
isHttpParam = json.isHttpParam();
isList = json.isList();
if(isList)
listClass=json.listClass();
} else {
// 没有注释则根据属性名小写化后的名字作列名
httpParamName = field.getName();
}
}
}
/**
* 根据json对象生成对应的bean。
*
* @param json
* @param bc
* @return
* @throws BeanException
*/
public static <T> T createBeanByJson(JSONObject json, Class<T> bc)
throws BeanException {
T bean = newBeanByClass(bc);
Object value = null;
if (json != null) {
Field[] fs = bc.getDeclaredFields();
JSONHolder ch = null;
//bean = newBeanByClass(bc);
// 给bean实例赋值
for (Field f : fs) {
ch = new JSONHolder(f);
if (!ch.isHttpParam)
continue;
try {
if (!ch.isList)
value = getValueByField(json, f, ch);
else {
JSONArray jarray = json.getJSONArray(ch.httpParamName);
if (jarray != null) {
value =createBeanListByJson(jarray, ch.listClass);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
throw new BeanException("createBeanByJson:获取数据错误", e);
}
if (value == null)
continue;
setFieldValue(f, value, bean);
}
}
return bean;
}
public static <T> List<T> createBeanListByJson(JSONArray list, Class<T> bc)
throws BeanException {
int size = list.length();
List<T> beanList = new ArrayList<T>(size);
for (int i = 0; i < size; i++) {
try {
beanList.add(createBeanByJson(list.getJSONObject(i), bc));
} catch (JSONException e) {
// TODO Auto-generated catch block
throw new BeanException("createBeanListByJson:获取JSONObject错误",
e);
}
}
return beanList;
}
/**
* 根据field类型,从json中取值。可以递归处理非集合类型。
*
* @param json
* @param field
* @param ch
* @return
* @throws BeanException
* @throws JSONException
*/
private static Object getValueByField(JSONObject json, Field field,
JSONHolder ch) throws BeanException, JSONException {
if (json == null)
return null;
String pn = ch.httpParamName;
Class fieldClass = field.getType();
// 根据属性类型从Cursor中获取值
if (fieldClass == String.class)
return json.getString(pn);
else if (fieldClass == int.class || fieldClass == Integer.class)
return json.getInt(pn);
else if (fieldClass == Date.class) {
try {
return Utils.parseChinaDate(json.getString(pn),
"yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
// TODO Auto-generated catch block
throw new BeanException("Date类型转换错误", e);
}
} else if(fieldClass==boolean.class||fieldClass==Boolean.class){
String v=json.getString(pn);
if(v.toLowerCase().equals("y")||v.toLowerCase().equals("true"))
return true;
else
return false;
}
else if (fieldClass == Long.class||fieldClass==long.class)
return json.getLong(pn);
else if (fieldClass == Double.class)
return json.getDouble(pn);
else if (fieldClass == Float.class)
return Float.parseFloat(json.getString(pn));
else if (fieldClass == Short.class)
return Short.parseShort(json.getString(pn));
else {
// 不为基础类,当做自建类来递归处理。
String jstr = json.getString(pn);
if (!jstr.equals("null")) {
JSONObject j = json.getJSONObject(pn);
if (j != null) {
return createBeanByJson(j, fieldClass);
}
}
}
return null;
}
/**
* 根据Bean生成网络要用的参数列表
*
* @param bean
* @return
* @throws BeanException
*/
public static ArrayList<BasicNameValuePair> getHttpParamsByBean(Object bean)
throws BeanException {
ArrayList<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
JSONHolder ch = null;
String pn = null;
Object value = "";
Field[] fs = bean.getClass().getDeclaredFields();
for (Field f : fs) {
ch = new JSONHolder(f);
if (!ch.isHttpParam)
continue;
pn = ch.httpParamName;
value = getFieldValue(bean, f);
if (value == null)
continue;
params.add(new BasicNameValuePair(pn, getString(value, f)));
}
return params;
}
public static String getString(Object v, Field f) {
if (v == null)
return "";
Class fieldClass = f.getType();
// 根据属性类型为values赋值
if (fieldClass == String.class)
return (String) v;
return v.toString();
}
}