• 记一次对象序列化不打印value值为null的属性问题


    背景:

      开发时遇到问题,看日志的入参的busiData中没有intRate这个属性,后面转成map时,有个判断

    if(map.containsKey("intRate")){
       BigDecimal amt = new BigDecimal(datas.get("intRate")); 
    }

    一直报空指针异常,很郁闷这个参数是怎么添加进去的,而且值是null

    测试代码如下:

    @Test
        public void test() {
            String json = "{"busiData":{"intRate1":null,"intRate2":"","overdueFlag":"N","firstDue":"51.594","loanPeriod":"12"},"loanAmt":6000.00,"loanDays":30,"productCode":"360JINXIAO","refundMethod":"03"}";
            CouponExchangeInput couponExchangeInput = JSONObject.parseObject(json, CouponExchangeInput.class);
            System.out.println(couponExchangeInput);
            logger.info("couponExchangeInput:{}", couponExchangeInput);
    System.out.println(
    "---------"); Map<Object, Object> map = new HashMap<>(); map.put("intRate1",null); map.put("intRate2",""); map.put("intRate3","aaa"); System.out.println(map); logger.info("map:{}", map); }

    结果:

    {"busiData":{"overdueFlag":"N","firstDue":"51.594","loanPeriod":"12","intRate2":""},"loanAmt":6000.00,"loanDays":30,"productCode":"360JINXIAO","refundMethod":"03"}
    INFO  [main] [TestCoupon:301] - couponExchangeInput:{"busiData":{"overdueFlag":"N","firstDue":"51.594","loanPeriod":"12","intRate2":""},"loanAmt":6000.00,"loanDays":30,"productCode":"360JINXIAO","refundMethod":"03"}
    ---------
    {intRate3=aaa, intRate1=null, intRate2=}
    INFO  [main] [TestCoupon:308] - map:{intRate3=aaa, intRate1=null, intRate2=}

    结论:

      对象的属性值为null,那么日志中不会打印该属性;属性值为空字符串,日志中会打印该属性

      map中,不论value值为null还是为空字符串,日志中都会打印所有的键值对;

  • 相关阅读:
    Oracle 不同故障的恢复方案
    IBM HACMP 系列 后期安装工作和管理任务二
    How to map SCN with Timestamp before 10g [ID 365536.1]
    ORA02024: Database Link Not Found [ID 1058949.1]
    IBM HACMP 系列 后期安装工作和管理任务三
    IBM System p5 服务器 HACMP 安装指南
    Oracle 不同用户之间 大量数据转移的方法测试
    Oracle 不同故障的恢复方案
    Nocatalog 下的RMAN 增量备份 shell脚本
    IBM HACMP 系列 安装和配置二
  • 原文地址:https://www.cnblogs.com/pluto-yang/p/9896008.html
Copyright © 2020-2023  润新知