【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"

测试:

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

参考资料:

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐