• 【SpringBoot整合Mybatis】数据库某字段值为空时,接口未返回该字段 解决办法


    SpringBoot整合Mybatis】数据库字段为空时,接口不返回该字段 解决办法

           今天整合项目的时候,发现了SpringBoot整合Mybatis的过程中,当数据库中这条记录中的某个字段为空时,select查询,并不返回这个字段,后来终于发现了问题所在,在这里做一个简单的总结,避免下次还出现这样的问题。

    问题描述:

    我这里的需求是:根据父节点ID来查询其下子节点的全部记录。

    出现问题描述如下

    1、先看一下数据库里面的记录,拿node_id=30012,parent_node_id=0, parent_node_rule=null,这条记录为例。从数据库中可以看出,目前选择的这条记录中parent_node_id=null,为空。
    在这里插入图片描述
    输入参数parent_id=0,调用接口来测试,发现返回的结果中并没有partent_node_rule=null的这个字段。即目前的情况是,当数据库中字段为null时,返回中无该字段。
    在这里插入图片描述

    排查问题:

    1、查看实体类该字段的类型
    在这里插入图片描述
    从图中可以看出,parentNodeRule字段的类型为Integer,它是int的封装类,默认值为null。目前看来,未存在问题。

    2、查看controller中接口的调用情况
    在这里插入图片描述
    从图中可以看出,调用接口,返回的是dmsZhiKongRules这个对象。返回的是一个对象,那么对象中的字段都应该可以取到的,那下一步排查就去查看xml配置文件中的sql语句。

    3、查看xml配置文件
    在这里插入图片描述
    从配置文件中,可以看出,该sql语句已经把parent_node_rule字段查询出来了,这里看也没有问题。

    解决问题:

           从目前的排查情况来看,写的代码,暂时是没发现问题,那么就应该考虑其他的原因了,在网上查找了一上午的资料后发现,是配置文件application.yml配置文件的问题。
    在这里插入图片描述

    因为项目是团队协作的,所以的配置文件都是共用的,我也只是负责其中的一部分,在进行代码编写的时候很少去操作application.yml配置文件,所以出现问题也很少往这方面想,但是排查了一圈,真的没有发现任何问题,查资料的时候发现可能是配置的问题,于是对这一块简单学习了一下。

    从图中可以看出spring下的这个配置被设置成了non_null,也就将Null的情况过滤掉了!这才是一直数据库中字段值为null,不返回该字段的真正原因!

    那么将这一点的配置修改为always即可,可参考下面代码对照修改:

    spring:
      jackson:
        default-property-inclusion: always
        date-format: "yyyy-MM-dd"
        time-zone: "GMT+8"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    测试:

    再次调用接口,查看返回的结果
    在这里插入图片描述
    已经成功显示字段值为null的这个字段,完美解决!!!!这个问题已经快把我折磨死了,整整查了一上午!!!希望大家可以注意,不要犯这样的错误,早日解决!

    参考资料:

    https://blog.csdn.net/fshj1106/article/details/105218774

  • 相关阅读:
    华为智慧屏 招一招新玩法,手机操控智慧屏,视频搜索,播放控制,截图分享轻松搞定
    【附源码】计算机毕业设计SSM社交网络数据采集系统
    内存学习(4):内存分类与常用概念3(ROM)
    【无标题】
    乘积小于 K 的子数组
    平行光场:基本框架与流程
    MYSQL 事务、事务隔离级别和MVCC,幻读
    【考研】数据结构考点——折半查找和折半插入排序
    【网络安全】永恒之蓝实战 - Mac通过Metasploit攻击Server2008
    Linux安装所需软件
  • 原文地址:https://blog.csdn.net/junR_980218/article/details/126720732