前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在BeanUtils注册自定义类型转换规则转换bean map

在BeanUtils注册自定义类型转换规则转换bean map

作者头像
路过君
发布2021-02-02 17:13:06
9380
发布2021-02-02 17:13:06
举报

使用org.apache.commons.beanutils.BeanUtils.describe可以将bean转换为Map<String,String>,但是某些特殊类型在通过BeanUtils.populate转换时会报错,例如JAVA8的LocalDateTime

org.apache.commons.beanutils.ConversionException: Default conversion to java.time.LocalDateTime failed.

解决

注册转换器

// 覆盖默认的String类型转换器,将LocalDateTime类型属性转换为时间戳文本
BeanUtilsBean.getInstance().getConvertUtils().register(new AbstractConverter() {
    @Override
    protected <T> T convertToType(final Class<T> type, final Object value) throws Throwable {
        if (String.class.equals(type) || Object.class.equals(type)) {
            return type.cast(value.toString());
        }
        throw conversionException(type, value);
    }

    @Override
    protected Class<?> getDefaultType() {
        return String.class;
    }

    @Override
    protected String convertToString(Object value) throws Throwable {
        if (value instanceof LocalDateTime) {
            return String.valueOf(((LocalDateTime) value).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
        } else {
            return super.convertToString(value);
        }
    }
}, String.class);
// 注册LocalDateTime类型转换器,将时间戳文本转换为LocalDateTime
BeanUtilsBean.getInstance().getConvertUtils().register(new Converter() {
    @Override
    public <T> T convert(Class<T> type, Object value) {
        if (value == null) {
            return null;
        }
        return (T) LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.valueOf((String) value)), ZoneId.systemDefault());
    }
}, LocalDateTime.class);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档