反射メカニズムを使用してrequestのパラメータを一括取得し、値を割り当てます.

2717 ワード

説明:servletではrequestからパラメータを取得する必要があり、インスタンスオブジェクトに値を割り当てる必要があります.パラメータが少ない場合はgetParameter(String name)を使用します.requestから取得しますが、データが多い場合、コードの冗長性が複雑で技術的な内容がないため、反射を利用してパラメータを一括して取得して値を付与する方法(String、Integer、int、Float、float、Double、double、java.sql.Date、java.util.Dateタイプのデータまたは配列のみを付与)を書きました.
import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;


/**
 *    request        ,      
 * 
 * @author dingshuangen
 *
 */
public class Conversion {

	public static  void convert(T t, HttpServletRequest request) {

		//      
		Class> c = t.getClass();
		try {
			//       
			Field[] fs = c.getDeclaredFields();
			for (Field f : fs) {
				//       
				f.setAccessible(true);
				//      
				String name = f.getName();
				//         
				Class> type = f.getType();
				//             
				if (type.isArray()) {

					System.out.println("s    ");
					//           
					String[] str = request.getParameterValues(name);
					if (str != null) {
						//        
						if (type == String.class) {

							//      
							f.set(t, str);
						} else if (type == int[].class || type == Integer[].class) {//   
							//         
							Integer[] args = new Integer[str.length];
							//  String   Integer
							for (int i = 0; i < str.length; i++) {
								args[i] = Integer.valueOf(str[i]);
							}

							f.set(t, args);
						} else if (type == Float[].class || type == float[].class) {
							//     float  
							Float[] args = new Float[str.length];
							//  String   Float
							for (int i = 0; i < str.length; i++) {
								args[i] = Float.valueOf(str[i]);
							}

							f.set(t, args);
						} else if (type == Double[].class || type == double[].class) {
							//     Double  
							Double[] args = new Double[str.length];
							//  String   Double
							for (int i = 0; i < str.length; i++) {
								args[i] = Double.valueOf(str[i]);
							}

							f.set(t, args);
						}else if(type==Date[].class){//   java.sql.Date   
							Date[] date=new Date[str.length];
							for(int i=0;i