Java BeanUtilsBean:将Date转换为String

时间:2011-04-22 15:53:28

标签: java apache-commons

我正在尝试运行BeanUtilsBean.getInstance().populate(...)但是在HTML表单上,有一个字段包含出生日期的字符串表示。对象bean的字段类型为java.util.Date

从Ggl中读取一些必须构建自定义转换器的搜索,但不太了解如何执行此操作。

任何人都可以提供帮助吗?

我的代码:

public static void main(String[] args) {
    Map<String, String[]> formData = new HashMap<String, String[]>();
    formData.put("email", new String[]{"danny@gmail.com"});
    formData.put("firstName", new String[]{"danny"});
    formData.put("lastName", new String[]{"miller"});
    formData.put("dob", new String[]{"15-Apr-1980"});
    formData.put("userName", new String[]{"dannymiller"});
    try {
        Consumer consumer = new Consumer();
        DateTimeConverter dtConverter = new DateConverter();
        dtConverter.setPattern("dd/MMM/yyyy");

        ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
        convertUtilsBean.deregister(Date.class);
        convertUtilsBean.register(dtConverter, Date.class);

        BeanUtilsBean beanUtilsBean = new BeanUtilsBean(convertUtilsBean, new PropertyUtilsBean());

        beanUtilsBean.populate(consumer, formData);


        if (consumer != null) {
            System.out.println(consumer.getEmail());
            System.out.println(consumer.getFirstName());
            System.out.println(consumer.getLastName());
            System.out.println(consumer.getDob());
            System.out.println(consumer.getUserName());
        }
    } catch  (Exception e) {
        e.printStackTrace();
    }

返回错误:

  

2011年4月22日晚上11:14:45   org.apache.commons.beanutils.converters.DateTimeConverter   toDate警告:DateConverter   不支持默认字符串为'Date'   转换。 2011年4月22日下午11:14:45   org.apache.commons.beanutils.converters.DateTimeConverter   toDate警告:( N.B。重新配置   转换器或使用替代品   实现)线程中的异常   “主要”   org.apache.commons.beanutils.ConversionException:   DateConverter不支持默认值   字符串到'日期'转换。在   org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:468)     在   org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:343)     在   org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:156)     在   org.apache.commons.beanutils.converters.ConverterFacade.convert(ConverterFacade.java:60)     在   org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:470)     在   org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1008)     在   org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)     在   com.ymatch.test.BeanTest.main(BeanTest.java:32)

2 个答案:

答案 0 :(得分:11)

您需要SimpleDateFormat来根据指定的格式解析给定的字符串。为此,您需要手动处理转换 - 以不同方式命名请求参数,然后手动设置。

但是beanutils有一个转换实用程序,所以你可以使用它(这个代码可以在每个应用程序执行一次):

DateTimeConverter dtConverter = new DateConverter();
dtConverter.setPattern("<your custom date pattern here>");
ConvertUtils.register(dtConverter, Date.class);

答案 1 :(得分:4)

使用此方法完成:

public Object populate(Object obj, HashMap<String, String[]> formData)
            throws IllegalAccessException, InvocationTargetException {
        ConvertUtils
                .register(new StringToDateConverter(), java.util.Date.class);
        BeanUtilsBean.getInstance().populate(obj, formData);
        return obj;
    }