美文网首页
记遇见的数据类型转换问题

记遇见的数据类型转换问题

作者: SILENCE_SPEAKS | 来源:发表于2020-12-17 11:56 被阅读0次

    1. 字符类型转换

    String.valueOf(T)和T.toString()的区别: 当参数T为空的时候,String.valueOf(T)会返回一个“null”字符串,T.toString()会报空指针异常;
    字符类型数值相加:new BigDecimal(str1).add(new BigDecimal(str2)).toString())

    2. 将Object转换为List

    public static <T> List<T> objToList(Object obj, Class<T> clazz)
    {
        List<T> result = new ArrayList<T>();
        if(obj instanceof List<?>)
        {
            for (Object o : (List<?>) obj)
            {
                result.add(clazz.cast(o));
            }
            return result;
        }
        return null;
    }
    

    3. Mysql数据库中的date、time类型在dubbo反序列化传输时遇见的bug

    推荐统一用 java.util.Date 进行接收
    问题:用 java.sql 包下的日期格式进行dubbo传输时,如果此日期属性为空,则会报如下错误()

    com.caucho.hessian.io.HessianServiceException: 具体哪个实体的属性:leaseEndDate: java.sql.Date cannot be assigned from null 或者 java.sql.Time cannot be assigned from null
    

    解决方法:服务端操作数据库统一用 java.util.Date (是 java.sql.Date 和 java.sql.Time 的父类) 进行接收,如果接口端需要展示时间类型,可以使用 SimpleDateFormat 指定类型转换
    参考链接

    4. Object类型转换为指定类型

    通过使用com.fasterxml.jackson.databind.ObjectMapper的ObjectMapper对象进行转换

    <!-- 源码中的方法 -->
    <!-- 
    fromValue:需要转换的对象(可以为Object类型)
    toValueType:指定转换的数据类型
    -->
    public <T> T convertValue(Object fromValue, Class<T> toValueType) throws IllegalArgumentException {
            return this._convert(fromValue, this._typeFactory.constructType(toValueType));
        }
    
    <!-- 使用 -->
    ObjectMapper objectMapper = new ObjectMapper();
    A objA = objectMapper.convertValue(object, A.class);
    

    5. Map转换为一个实体类对象

    使用 fastjson

    JSON.parseObject(JSON.toJSONString(Map<String, ? extends Object>), Class<T> cls);
    

    使用org.apache.commons.beanutils.BeanUtils工具类

    BeanUtils.populate(Object bean, Map<String, ? extends Object> properties)
    

    相关文章

      网友评论

          本文标题:记遇见的数据类型转换问题

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