200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【SpringBoot整合Mybatis】数据库某字段值为空时 接口未返回该字段 解决办法

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

时间:2020-02-29 13:38:17

相关推荐

【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: alwaysdate-format: "yyyy-MM-dd"time-zone: "GMT+8"

测试:

再次调用接口,查看返回的结果

已经成功显示字段值为null的这个字段,完美解决!!!!这个问题已经快把我折磨死了,整整查了一上午!!!希望大家可以注意,不要犯这样的错误,早日解决!

参考资料:

/fshj1106/article/details/105218774

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。