【小结】【想法】bean封装数据的时候报date转换错误

2019-07-21  本文已影响0人  桌面很乱

先说解决方法,再说原理。
自定义转化器
1.编写一个类 实现Conventer接口
2.实现方法
convert(转换成的类型,前台页面传入的字符串)
3.注册转化器 在封装数据之前注册
ConvertUtils.register(new MyConventer(), Date.class);

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class MyConventer implements Converter {

@Override
public Object convert(Class clazz, Object value) {
    // class 要装成的类型
    // object 页面上传入的值
    
    //将object 转成 date
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
        Date date = sdf.parse((String)value);
        return date;
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
  }

}

注册自定义转换器

ConvertUtils.register(new MyConventer(), Date.class);//注册自定义转化器
BeanUtils.populate(user, request.getParameterMap());


以下是推想,没有看过源码...
转换器属于org.apache.commons.beanutils.ConvertUtils,
所以可以知道注册自定义转换器用到的ConvertUtils.register(new MyConventer(), Date.class)是beanutils自带的,
支持传入一个自定义的转换器,帮助beanutils的populate方法自动转换。

图片来源作者地址https://me.csdn.net/wang_xuaohao

从上面搜到的资料来看,convert方法就是转换的核心方法。所以自定义converter的时候,要通过这个方法来实现转换逻辑,上面第一段代码的override证明了这点,convert是converter的方法。

而注册自定义转换器ConvertUtils.register(new MyConventer(), Date.class)则是为了告诉populate方法,遇到Date类型的就使用MyConventer来转换。

还有一点,第一段代码里没有使用到传入进来的Class参数,这个应该是为了使用反射技术去完成一些私有方法(不确定)等?

所以整理一下思路,就是自定义一个converter,先实现converter接口,重写convert方法,在beanutils封装数据之前注册转换器。

上一篇下一篇

猜你喜欢

热点阅读