利用反射来处理多参数对象的数据处理

最近项目遇到一个问题,就是客户需要我们存储一个表单的数据,而那个表单有40个数据!!!在前台我们使用Struts2的ModelDriven来获取对象,但往数据库中存就成了问题。因为它有20个字段是text类型,如果将null传过去会报varbinary转换text类型错误。(实在不知道这个varbinary是哪里冒出来的)。所以我们打牌一次次的判定获得的数据,如果为null,就赋值为“”。但是40个字段的get判定,要写很长时间,所以我们就用了一下反射处理。

 

	//判断字段是否为空,如果是,赋值为“”
	private void changeNull(RecordTemplate recordTemplate){
		//得到RecordTemplate所有方法
		Method[] methods  = recordTemplate.getClass().getMethods();
		System.out.println(methods.length);
		for(int i=0;i<methods.length;i++){
			String name = methods[i].getName();
			//如果方法名以getParam为开始,那就是我们要的方法
			if(name.indexOf("getParam")>=0){
				try {
					//如果该数据为空
					if(methods[i].invoke(recordTemplate)==null){
						String isName = name.substring(3);
						System.out.println(isName);
						try {
							//得到该get方法对应的set方法
							Method method = recordTemplate.getClass().getMethod

("set"+isName, String.class);
							//使用对应的set方法赋值为“”
							method.invoke(recordTemplate, "");
						} catch (SecurityException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (NoSuchMethodException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	} 
这样,就可以把这个bean实体的所有get方法遍历一遍,如果数据为null,就赋值为“”。
 

 

你可能感兴趣的:(反射)