ITEEDU

UtilJSON

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();
	}
}