Java BeanUtils复制属性:注册ConvertUtils

Java BeanUtils复制属性:注册ConvertUtils,java,Java,我有用Java编写的web应用程序。Im使用BeanUtils.copyProperties方法。如果日期字段为空,则抛出错误。我使用ConvertUtils.register方法解决了这个问题 ConvertUtils.register(new DateConverter(null), Date.class); 它现在可以工作了,但是使用ConvertUtils.register的正确方法是什么呢。它应该放在哪里?对于一个类(日期)类型,您所做的是正确的。通过在ConvertUtilsBea

我有用Java编写的web应用程序。Im使用
BeanUtils.copyProperties
方法。如果
日期
字段为空,则抛出错误。我使用
ConvertUtils.register
方法解决了这个问题

ConvertUtils.register(new DateConverter(null), Date.class);

它现在可以工作了,但是使用
ConvertUtils.register
的正确方法是什么呢。它应该放在哪里?

对于一个类(日期)类型,您所做的是正确的。通过在
ConvertUtilsBean
上调用register方法,可以为所有受支持的类型(包括Date)实现这一点,如下所示:

    ConvertUtilsBean convertUtilsBean = BeanUtilsBean.getInstance().getConvertUtils();
    convertUtilsBean.register(false, true, -1);
这里,第一个参数
false
表示不抛出转换异常。第二个参数
true
表示,如果存在异常,则使用null作为默认值。第三个参数
-1
表示数组类型将默认为null。如果要使用特定大小的默认数组,请将该大小作为第三个参数


请参阅更多详细信息。

要在适当的位置注册转换器,请查看以下链接:


一个好地方是ServletContextListener,你只需要做一次


每个请求都应该调用它?在示例中调用
register
方法时,
ConvertUtilsBean.getInstance()
.register(converter,clazz)执行代码。由于ConvertUtilsBean是作为静态引用(伪单例)检索的,因此对每个类加载器线程只调用一次
register
就足够了。您有建议防止在web应用程序中多次调用它吗?它是这么说的。“这是一个伪单例-每个(线程)上下文类加载器提供一个实例。此机制为部署在同一容器中的web应用提供隔离。”如果您的web应用在单个服务器上运行,则只需一个调用即可。是的,我理解该语句。我不知道在哪里调用这个方法。目前,它的每一个请求。