`

使用BeanUtils时,遇到日期类型的空值时会抛错的解决办法

    博客分类:
  • java
 
阅读更多

在使用BeanUtils的populate方法或者getProperty、setProperty方法时都会调用convert进行转换,但Converter只支持一些基本的类型,对于日期类型却不支持。如果源目标中包含日期类型字段,而且该字段值为空时,就会出现异常,无法赋值,解决方法如下:

 

1、新建一个转换器类,该类实现Converter接口,在convert方法中实现日期类型值的转换逻辑

public class DateConverter implements Converter{   
	    public Object convert(Class type, Object value){   
	        if(value == null){   
	            return null;   
	        }else if(type == Timestamp.class){   
	            return convertToDate(type, value, "yyyy-MM-dd HH:mm:ss");   
	        }else if(type == Date.class){   
	            return convertToDate(type, value, "yyyy-MM-dd");   
	        }else if(type == String.class){   
	            return convertToString(type, value);   
	        }   
	  
	        throw new ConversionException("不能转换 " + value.getClass().getName() + " 为 " + type.getName());   
	    }   
	  
	    protected Object convertToDate(Class type, Object value, String pattern) {   
	        SimpleDateFormat sdf = new SimpleDateFormat(pattern);   
	        if(value instanceof String){   
	            try{   
	                if(CommonUtils.isEmpty(value.toString())){   
	                    return null;   
	                }   
	                Date date = sdf.parse((String) value);   
	                if(type.equals(Timestamp.class)){   
	                    return new Timestamp(date.getTime());   
	                }   
	                return date;   
	            }catch(Exception pe){   
	                return null;   
	            }   
	        }else if(value instanceof Date){   
	            return value;   
	        }   
	           
	        throw new ConversionException("不能转换 " + value.getClass().getName() + " 为 " + type.getName());   
	    }   
	  
	    protected Object convertToString(Class type, Object value) {   
	        if(value instanceof Date){   
	            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   
	               
	            if (value instanceof Timestamp) {   
	                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
	            }    
	               
	            try{   
	                return sdf.format(value);   
	            }catch(Exception e){   
	                throw new ConversionException("日期转换为字符串时出错!");   
	            }   
	        }else{   
	            return value.toString();   
	        }   
	    }   
	}  

 2、注册BeanUtils转换器

ConvertUtils.register(new DateConverter(), java.util.Date.class);

 

分享到:
评论

相关推荐

    BeanUtils jar包+源码

    为了避免这种情况,可以使用`NullHandler`或`DefaultHandler`来处理空值,它们会在遇到null值时返回默认值或不做任何操作。 5. **自定义转换**:如果内置的类型转换不能满足需求,可以通过实现`PropertyEditor`接口...

    使用BeanUtils操作属性的一个小坑

    如果属性类型不匹配,可以实现`org.apache.commons.beanutils.Converter`接口,然后通过`registerConverter()`方法注册,使BeanUtils在遇到这种类型转换时使用自定义的转换逻辑。 总之,虽然BeanUtils在处理...

    Commons BeanUtils 1.8.3 API

    6. **异常处理**:在处理过程中遇到的异常,如无法找到setter或getter方法,BeanUtils会抛出一个`PropertyUtilsException`,方便开发者进行异常处理。 7. **自定义转换器**:用户可以通过实现`Converter`接口来自...

    BeanUtils工具包

    - 如果属性名不完全匹配或者类型转换失败,BeanUtils会抛出异常,因此需要确保对象属性名的正确性和类型的一致性。 - 为了提高性能,可以使用BeanUtils.copyProperties()的重载方法,指定只复制部分属性。 五、...

    beanutils JAR包下载

    4. **空值处理(Null Handling)**:当尝试设置null值时,BeanUtils会根据具体配置决定是否抛出异常,或者如何优雅地处理这种状况。 5. **国际化支持(Internationalization Support)**:BeanUtils可以与...

    beanutils 的jar包

    4. **异常处理**:BeanUtils在执行过程中,如果遇到无法处理的情况(如找不到对应的setter或getter方法),会抛出`InvocationTargetException`。这有助于我们在程序中捕获并处理这些异常。 5. **依赖注入**:虽然...

    commons-beanutils-1.8.0.rar

    5. **异常处理**:BeanUtils库在遇到错误时,通常会抛出`PropertyVetoException`、`IllegalAccessException`、`InvocationTargetException`等异常,这有助于开发者追踪和调试代码。 6. **国际化支持**:虽然1.8.0...

    使用servlet实现注册&登录&解决注册乱码&beanutils;的使用

    本教程将探讨如何使用Servlet实现用户注册和登录功能,以及如何解决注册时可能出现的乱码问题,并利用Apache的BeanUtils库简化Java Bean的操作。 首先,让我们深入理解Servlet的工作原理。Servlet是Java类,遵循...

    BeanUtils包

    4. **类型匹配:** BeanUtils在进行属性复制时,如果源属性类型与目标属性类型不一致,会尝试自动转换。但在某些情况下,这种转换可能会失败,需要预先进行类型检查。 5. **版本兼容性:** 不同版本的BeanUtils可能...

    beanutils源码

    6. **异常处理**:BeanUtils在处理过程中遇到问题时,会抛出特定的异常,如`ConvertException`,这有助于调试和定位问题。 源码分析可以从以下几个方面入手: 1. **阅读源码结构**:首先了解项目的目录结构,包括...

    beanutils包

    4. **空值处理**:BeanUtils提供了对空值的处理,当尝试设置一个null值到对象的属性时,它会自动跳过,避免引发`NullPointerException`。 5. **集合操作**:BeanUtils还支持对集合类的操作,如列表和数组,可以方便...

    BeanUtils工具类

    在属性设置过程中,BeanUtils会自动进行类型转换。例如,如果属性期望的是一个整型值,而传递的是一个字符串,它会尝试将字符串转换为整型。然而,如果转换失败,它会抛出异常,因此在使用时需要注意处理这类异常。...

    commons-beanutils-1.9.4

    - 使用BeanUtils时需注意处理可能抛出的`IllegalAccessException`、`InvocationTargetException`和`NoSuchMethodException`等异常。 - 自定义类型转换器时,需确保转换过程的健壮性和兼容性。 - 在进行对象复制时...

    beanutils的jar包

    然而,需要注意的是,BeanUtils使用反射进行操作,可能会带来安全风险,因为它不进行任何类型检查。如果属性类型不匹配,可能会抛出`InvocationTargetException`。因此,使用时应确保属性类型的一致性,并对可能出现...

    beanutils使用

    在上述代码中,BeanUtils会自动将Map中的"name"和"age"键对应的值分别设置到myBean对象的name和age属性上。需要注意的是,`populate()`方法依赖于属性名的精确匹配,因此Map的键应与JavaBean的属性名保持一致,大小...

    commons-beanutils-1.9.3-bin.zip

    3. **空值处理**:在处理Java Bean时,BeanUtils会自动处理null值,避免因为空值引发的异常。例如,在复制属性时,如果源对象的某个属性为空,BeanUtils会忽略该属性,不会影响目标对象的其他属性。 4. **反射支持*...

    commons-beanutils-1.8.3-bin.rar

    6. **异常处理**:BeanUtils在遇到错误时,如属性不存在或类型转换失败,会抛出适当的异常,便于开发者调试和处理。 7. **依赖注入**:虽然不如Spring等框架那样强大,但BeanUtils也提供了一种简单的方式来进行依赖...

    BeanUtils所需的包

    例如,当源对象和目标对象的属性类型不完全匹配时,BeanUtils会尝试使用ConversionService进行类型转换。 在使用BeanUtils时,需要注意一些潜在的问题。首先,由于BeanUtils是通过反射机制来操作对象的属性,所以...

    commons-beanutils 源码

    - **类型转换**:BeanUtils具备自动类型转换的能力,当设置的属性值类型与属性期望类型不匹配时,会尝试进行类型转换。 - **对象拷贝**:`copyProperties()`方法用于将一个对象的所有属性值复制到另一个对象,极大...

    BeanUtils类库jar包和源码

    在进行属性复制时,如果源对象的某个属性值为空,BeanUtils会自动跳过,避免因为空值引发异常。同时,它还提供了自定义转换器的功能,通过实现Converter接口,可以自定义类型转换规则,处理不同类型间的转换问题。 ...

Global site tag (gtag.js) - Google Analytics