对实体类的所有String类型的成员变量值trim

使用反射,可以对实体类中的所有String类型的成员变量的值执行trim操作

(1)trim

/***
	 * 对object中的所有成员变量的值,执行trim操作<br>
	 * 即去掉首尾的空格
	 * @param obj
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static void trimObject(Object obj) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException
	{
		if(obj==null){
			return;
		}
		List<Field> fieldsList =getAllFieldList(obj.getClass());
		for(int i=0;i<fieldsList.size();i++){
			Field f=fieldsList.get(i);
			Object vObj=getObjectValue(obj,f );
			if(f.getType().getName().equals("java.lang.String") && (vObj instanceof String) ){
				String str=(String)vObj;
				if(str!=null){
					str=str.trim();
					f.setAccessible(true);
					f.set(obj, str);
				}
			}
		}
	}	

应用场景

// 是否清除成员变量的值前后的空格
		boolean isTrim2=false;
		String isTrim22Str=DictionaryParam.get(Constant2.DICTIONARY_GROUP_GLOBAL_SETTING,"is_trim_columnValue");
		if(!ValueWidget.isNullOrEmpty(isTrim22Str)){
			isTrim2=Boolean.parseBoolean(isTrim22Str);
		}
		if(isTrim2&&user!=null){
			try {
				ReflectHWUtils.trimObject(user);
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}

(2)把值为空字符串的成员变量设置为null

/***
	 * 把对象中空字符串改为null
	 * @param obj : 要修改的对象:java bean
	 * @param isTrim : 是否清除成员变量的值前后的空格
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static void convertEmpty2Null(Object obj,boolean isTrim) 
			throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		if(obj==null){
			return;
		}
		List<Field> fieldsList =getAllFieldList(obj.getClass());
		for(int i=0;i<fieldsList.size();i++){
			Field f=fieldsList.get(i);
			Object vObj=getObjectValue(obj,f );
			if(f.getType().getName().equals("java.lang.String") && (vObj instanceof String) ){
				String str=(String)vObj;
				if(isTrim){//清除首尾的空格
					if(str!=null){
						str=str.trim();
					}
				}
				if(SystemHWUtil.EMPTY.equals(str)){
//					System.out.println(f.getName());
//					System.out.println(f.getType().getName());
					f.setAccessible(true);
					f.set(obj, null);
				}else{
					if(isTrim){//清除首尾的空格
						f.setAccessible(true);
						f.set(obj, str);
					}
				}
			}
		}
	}

	/***
	 * 不trim
	 * @param obj
	 * @throws SecurityException
	 * @throws NoSuchFieldException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public static void convertEmpty2Null(Object obj) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
		if(obj==null){
			return;
		}
		convertEmpty2Null(obj, false/* isTrim */);
	}

应用场景:

// 是否清除成员变量的值前后的空格
			boolean isTrim2=false;
			String isTrim22Str=DictionaryParam.get(Constant2.DICTIONARY_GROUP_GLOBAL_SETTING,"is_trim_columnValue");
			if(!ValueWidget.isNullOrEmpty(isTrim22Str)){
				isTrim2=Boolean.parseBoolean(isTrim22Str);
			}
			try {
				//把对象中空字符串改为null
				ReflectHWUtils.convertEmpty2Null(ordersDetail,isTrim2);
				if(!ValueWidget.isNullOrEmpty(ordersDetail.getToothOrders())){
					ReflectHWUtils.convertEmpty2Null(ordersDetail.getToothOrders(),isTrim2);//不需要再set一遍
				}
				if(!ValueWidget.isNullOrEmpty(ordersDetail.getProducts())){
					ReflectHWUtils.convertEmpty2Null(ordersDetail.getProducts(),isTrim2);//不需要再set一遍
				}
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
时间: 2024-12-27 07:54:30

对实体类的所有String类型的成员变量值trim的相关文章

javabean(实体类)转Map类型

从网上"風亦飞"的导出EXCEL的源码提取出来的,觉得很好用,分享一下给大家,主要看beanToMap方法就OK了 /*下面是从poi导出EXCEL的一部分代码,主要将传参数的list转换为map类型,list装载的数据是从数据库取出来的,可以是数组类型,也可以是map类型,也可以是实体类*/ public static TableData createTableData(List list,TableHeaderMetaData headMeta,String[] fields){

编写一个Car类,具有String类型的属性品牌,具有功能drive;

24.编写一个Car类,具有String类型的属性品牌,具有功能drive: 定义其子类Aodi和Benchi,具有属性:价格.型号:具有功能:变速: 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性. package zuoye; public class Cat { String pinpai; double sudu; double jiage; String xinghao; public String getPinpai() { return pin

领域模型中的实体类分为四种类型:VO、DTO、DO、PO

http://kb.cnblogs.com/page/522348/ 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来. DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布

转:领域模型中的实体类分为四种类型:VO、DTO、DO、PO

经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析.得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据.一.实体类百度百科中对于实体类的定义如下:实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关.根据以上定义,我们可以了解到,实体类有两方面内容,存储数据和执行

MFC 一个类访问另一个类成员对象的成员变量值

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/35263857 MFC中一个类要访问另外一个类的的对象的成员变量值,这就需要获得原来那个类对象的指针,其实有好几种方法都可以实现. 比如维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互访问. 一.示例:创建MFC对话框,实现对个对话框之间数据访问 我们创建一个MFC对话框应用程序,命名为Visit工程. 对话框本身有一个主界面(CVisitDlg对话框

MFC 一个类訪问还有一个类成员对象的成员变量值

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/35263857 MFC中一个类要訪问另外一个类的的对象的成员变量值,这就须要获得原来那个类对象的指针,事实上有好几种方法都能够实现. 比方维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互訪问. 一.演示样例:创建MFC对话框,实现对个对话框之间数据訪问 我们创建一个MFC对话框应用程序,命名为Visitproject. 对话框本身有一个主界面(CVis

Java包装类之实体类不要使用基本类型

[color=rgba(0, 0, 0, 0.75)]今天来记录一下,在项目中因为基本类型,所产生的bug.**U•ェ•*U** 包装类:8种基本类型的包装类 应用场景:数据库建立实体映射多用包装类 这两句话是重点:就是建立实体类禁止使用基本数据量类型!!!而用对应的包装类, 为什么呢,看以下场景. [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <font styl

struct框架中实体类中属性的类型错误问题

在struct框架中,我们会写出实体类然后再sqlmap中进行映射,通常我们都知道 java中date类型有java.sql.date 和 java.util.date 经过细心发现,将对象生成为json对象时,json类会将date类型转换成java.util.date 如果在实体类中写成java.sql.date,就会抛出异常 下面我就来传个图 这里仅仅只需要把实体中date类型导入的包改成util的便不会出错 有人说util的包更常用,其实sql包中的直接输入就和我们平时写的时间的差不多,

Oracle数据库使用mybatis的时候,实体类日期为Date类型,mybatis里面定义的是Date类型,插入的时候,时分秒全部是12:00:00问题

实体类中日期定义的是Date类型的,没毛病: 我在mybatis里面定义的是Date类型的,进行测试的时候发现,数据库插入的日期的时分秒全部都是一样的,都是12:00:00,很郁闷: 后来把mybatis里的类型改为TIMESTAMP,发现查询,插入和修改都正常了. 原文地址:https://www.cnblogs.com/zhang-yawei/p/10362849.html