当前位置:网站首页>阿里巴巴规范之POJO类中布尔类型的变量都不要加is前缀详解
阿里巴巴规范之POJO类中布尔类型的变量都不要加is前缀详解
2022-08-11 05:35:00 【geekmice】
说明
【强制】POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列
化错误。
说明:在本文 MySQL 规约中的建表约定第一条,表达是与否的变量采用 is_xxx 的命名方式,所以,需要
在设置从 is_xxx 到 xxx 的映射关系。
反例:定义为基本数据类型 boolean isDeleted 的属性,它的方法也是 isDeleted(),框架在反向解析的时
候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
问题复现
准备工作
1、需要的依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
2、对应java文件
public class App {
public static void main(String[] args) {
TempOne temp = new TempOne();
temp.setLive(true);
TempTwo tempTwo = new TempTwo();
tempTwo.setLive(true);
System.out.println("temptwo isLive:" + new Gson().fromJson(JSON.toJSONString(tempTwo),TempTwo.class));
System.out.println("temp live:"+ new Gson().fromJson(JSON.toJSONString(temp), TempOne.class));
}
}
3、执行后效果
temptwo isLive:TempTwo{isLive=false}
tempone live:Temp{live=true}
4、结果分析
TempTwo类已经将isLive属性设置为true,为什么返回确是false,原因是因为JSON框架通过扫描所有的getter后发现有一个isLive方法,然后根据JavaBeans的规范,解析出变量名为live,把model对象序列化城字符串后内容为{“live”: true}。
然后根据{“live”: true}这个json串,Gson框架在通过解析后,通过反射寻找People类中的live属性,但是TempTwo类中只有isLive属性,找不到对应的属性,所以,最终反序列化后的TempTwo类的对象中,isLive则会使用默认值false
这样导致前台布尔类型数据送不到后台,由于前台传过来会把命名为isX的变量解析为X,但是我们pojo类中布尔类型属性是isX,导致找不到X,故而传递值失败;
最终解释了:pojo类布尔类型变量都不要加is前缀
注意点
所有的POJO类属性必须使用包装数据类型。
RPC方法的返回值和参数必须使用包装数据类型。
所有的局部变量使用基本数据类型。
boolean类型的默认值为false;而Boolean类型的默认值是null
边栏推荐
- Threatless Technology-TVD Daily Vulnerability Intelligence-2022-8-3
- SECURITY DAY01 (Monitoring Overview, Zabbix Basics, Zabbix Monitoring Services)
- 智能合约 ——— app评分合约
- kill 命令
- Threatless Technology-TVD Daily Vulnerability Intelligence-2022-7-30
- Threatless Technology-TVD Daily Vulnerability Intelligence-2022-7-25
- 华为防火墙-6
- 华为防火墙-1-安全区域
- SECURITY DAY03(一键部署zabbix)
- SECURITY DAY06 ( iptables firewall, filter table control, extended matching, typical application of nat table)
猜你喜欢
Project Notes - Random 2
Arcgis小工具_实现重叠分析
树莓派设置静态IP地址
(三)软件测试理论(了解软件的缺陷知识)
HCIP OSPF/MGRE综合实验
SECURITY DAY04 (Prometheus server, Prometheus monitored terminal, Grafana, monitoring database)
ETCD cluster fault emergency recovery - local data is available
pytorch下tensorboard可视化深坑
FusionCompute8.0.0实验(1)CNA及VRM安装
ETCD容器化搭建集群
随机推荐
ansible batch install zabbix-agent
中国移动通信集团有限公司:业务委托书
uboot设置默认的bootdelay
HPC平台搭建
(3) Software testing theory (understanding the knowledge of software defects)
SECURITY DAY06( iptables防火墙 、 filter表控制 、 扩展匹配、nat表典型应用 )
利用opencv读取图片,重命名。
Project Notes - Random 2
arcgis填坑_3
slurm集群搭建
SECURITY DAY03(一键部署zabbix)
HCIP OSPF/MGRE综合实验
cloudreve使用体验
Threatless Technology-TVD Daily Vulnerability Intelligence-2022-7-28
FusionCompute8.0.0实验(0)CNA及VRM安装(2280v2)
华为防火墙会话 session table
Local yum source build
Es common operations and classical case
iptables 流量统计
ETCD cluster fault emergency recovery - to recover from the snapshot