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

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

作者: 桌面很乱 | 来源:发表于2019-07-21 20:54 被阅读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封装数据之前注册转换器。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/hgrvlctx.html