一、前言
今天在写一个springboot+vue前后端分离的项目时,发现如下问题:
上述是我写的单选框控件的代码,因为用了数据双向绑定,所以只要editForm.sex
中的数据发生变化,那么这个单选框就能选中指定的选项,我数据库中的数据如下:
按道理来说,如果数据库中的数据传到前端,然后赋值给editForm.sex
的话,单选按钮就会自己选种,可是事实并不如此,浏览器页面如下:
奇怪吧!!
二、 排错
1、刚开始的思路是认为:是不是只有字符串类型才能被识别,而我的数据是整数所以识别不了。我直接指定固定数值来测试,如下:
浏览器页面如下:
发现用整数也能被识别,思路被推翻!
接着我就用字符串类型来测试,发现字符串类型识别不了!!居然字符串才是识别不了的!!
那我现在就查看一下自己的数据类型会不会是字符串才导致识别不了的呢,在浏览器中输出我们的数据,如下:
我尼玛布尔类型
,它是布尔类型
谁能懂?
2、接下来的思路是,是不是数据在前端的某个地方被我自己转换过类型,然后就去看自己的代码,发现并没有转换过数据类型。
3、那会不会是数据在传输过程中自动转换类型了呢?我查了一些资料之后,发现这种情况并不会轻易的发生,也就是说,大概不是这个原因导致的。
4、既然前端和传输数据的过程都查看过了,那现在就去排错后端:
首先是数据库字段的类型,如下:
发现是整型,数据库字段没有问题。接着排查controller
层,发现也没有问题。因为我用的是MybatisPlus
,所以不用排除dao
和service
这两层。最后排除实体类,图片如下:
我尼玛,它是布尔类型
,它是布尔类型
谁能懂?
后面发现是MybatisPlus
的问题,MybatisPlus
在自动生成代码的时候,会默认将tinyint(1)
类型转换为Boolean
类型生成。然后数据库中的整数映射到实体类中时,会把0
转换为false
,其余的数字转换为true
,所以传到前端的数据才是布尔类型。
后面将实体类字段的类型改为整型之后,完美解决问题!!