记一次排错:java后端的数据是0或者1,传到前端之后变成了true或者false

一、前言

今天在写一个springboot+vue前后端分离的项目时,发现如下问题:
在这里插入图片描述

上述是我写的单选框控件的代码,因为用了数据双向绑定,所以只要editForm.sex中的数据发生变化,那么这个单选框就能选中指定的选项,我数据库中的数据如下:
在这里插入图片描述

按道理来说,如果数据库中的数据传到前端,然后赋值给editForm.sex的话,单选按钮就会自己选种,可是事实并不如此,浏览器页面如下:
在这里插入图片描述

奇怪吧!!

二、 排错

1、刚开始的思路是认为:是不是只有字符串类型才能被识别,而我的数据是整数所以识别不了。我直接指定固定数值来测试,如下:
在这里插入图片描述

浏览器页面如下:
在这里插入图片描述

发现用整数也能被识别,思路被推翻!

接着我就用字符串类型来测试,发现字符串类型识别不了!!居然字符串才是识别不了的!!

那我现在就查看一下自己的数据类型会不会是字符串才导致识别不了的呢,在浏览器中输出我们的数据,如下:
在这里插入图片描述

我尼玛布尔类型,它是布尔类型谁能懂?

2、接下来的思路是,是不是数据在前端的某个地方被我自己转换过类型,然后就去看自己的代码,发现并没有转换过数据类型。

3、那会不会是数据在传输过程中自动转换类型了呢?我查了一些资料之后,发现这种情况并不会轻易的发生,也就是说,大概不是这个原因导致的。

4、既然前端和传输数据的过程都查看过了,那现在就去排错后端:

首先是数据库字段的类型,如下:
在这里插入图片描述

发现是整型,数据库字段没有问题。接着排查controller层,发现也没有问题。因为我用的是MybatisPlus,所以不用排除daoservice这两层。最后排除实体类,图片如下:
在这里插入图片描述

我尼玛,它是布尔类型,它是布尔类型谁能懂?

后面发现是MybatisPlus的问题,MybatisPlus在自动生成代码的时候,会默认将tinyint(1)类型转换为Boolean类型生成。然后数据库中的整数映射到实体类中时,会把0转换为false,其余的数字转换为true,所以传到前端的数据才是布尔类型。

后面将实体类字段的类型改为整型之后,完美解决问题!!

关于MybatisPlus会将tinyint(1)转换为Boolean的问题,可以参考以下两边文章:

https://blog.csdn.net/huang007guo/article/details/103667312

https://www.jianshu.com/p/ee062df18ee1

猜你喜欢

转载自blog.csdn.net/qq_47188967/article/details/129736733