Java BeanUtilsBean:将日期转换为字符串
我正在尝试运行Java BeanUtilsBean:将日期转换为字符串,java,apache-commons,Java,Apache Commons,我正在尝试运行BeanUtilsBean.getInstance().populate(…),但在HTML表单上,有一个字段携带出生日期的字符串表示形式。对象bean的字段类型为java.util.Date 阅读Ggl的一些搜索,它们必须构建自定义转换器,但不太了解如何实现 有人能帮忙吗 我的代码: public static void main(String[] args) { Map<String, String[]> formData = new HashMap<
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();
}
publicstaticvoidmain(字符串[]args){
Map formData=new HashMap();
formData.put(“电子邮件”,新字符串[]{”danny@gmail.com"});
put(“firstName”,新字符串[]{“danny”});
put(“lastName”,新字符串[]{“miller”});
formData.put(“dob”,新字符串[]{“1980年4月15日”});
put(“用户名”,新字符串[]{“dannymiller”});
试一试{
消费者=新消费者();
DateTimeConverter dtConverter=新的日期转换器();
dtConverter.setPattern(“dd/MMM/yyyy”);
ConvertUtilsBean ConvertUtilsBean=新ConvertUtilsBean();
撤销注册(Date.class);
register(dtConverter,Date.class);
BeanUtilsBean BeanUtilsBean=新的BeanUtilsBean(convertUtilsBean,new PropertyUtilsBean());
填充(消费者、表单数据);
if(消费者!=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());
}
}捕获(例外e){
e、 printStackTrace();
}
返回错误:
2011年4月22日晚上11:14:45
org.apache.commons.beanutils.converters.DateTimeConverter
toDate警告:日期转换器不可用
不支持“日期”的默认字符串
转换时间:2011年4月22日晚上11:14:45
org.apache.commons.beanutils.converters.DateTimeConverter
toDate警告:(注意:重新配置
转换器或使用替代品
实现)线程中的异常
“主要”
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.converts.AbstractConverter.convert(AbstractConverter.java:156)
在
org.apache.commons.beanutils.converts.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)
在
main(BeanTest.java:32)
您需要一个
simpleDataFormat
,通过它可以根据指定的格式解析给定的字符串。为此,您需要手动处理转换-以不同的方式命名请求参数,然后手动设置它
但是beanutils有一个转换实用程序,所以您可以使用它(此代码可以在每个应用程序中执行一次):
DateTimeConverter dtConverter=new DateConverter();
dtConverter.setPattern(“”);
寄存器(dtConverter,Date.class);
使用此方法完成:
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;
}
公共对象填充(对象obj,HashMap formData)
抛出IllegalAccessException,InvocationTargetException{
ConvertUtils
.register(新的StringToDateConverter(),java.util.Date.class);
BeanUtilsBean.getInstance().populate(obj,formData);
返回obj;
}
我刚刚上传了代码,我应该将哪部分放入SimpleDataFormat?非常有趣,DateTimeConverter dtConverter=new DateTimeConverter()
无法实例化。抱歉,请参阅更新。这是具体的日期转换器
,抱歉,我已经像上面那样更新了代码,但仍然是相同的错误。我有一个问题,如果日期的值为空,请发送异常。如何解决?谢谢。
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;
}