说明
【强制】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框架在通过解析后,通过反射寻找TempTwo类中的live属性,但是TempTwo类中只有isLive属性,找不到对应的属性,所以,最终反序列化后的TempTwo类的对象中,isLive则会使用默认值false
这样导致前台布尔类型数据送不到后台,由于前台传过来会把命名为isX的变量解析为X,但是我们pojo类中布尔类型属性是isX,导致找不到X,故而传递值失败;
最终解释了:pojo类布尔类型变量都不要加is前缀

注意点

所有的POJO类属性必须使用包装数据类型。
RPC方法的返回值和参数必须使用包装数据类型。
所有的局部变量使用基本数据类型。
boolean类型的默认值为false;而Boolean类型的默认值是null

阿里巴巴规范之POJO类中布尔类型的变量都不要加is前缀详解相关推荐

  1. POJO 类中布尔类型为啥不让用 isXxx 命名

    一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...

  2. POJO类中布尔类型属性的定义与命名

    阿里Java开发手册中强制规定: 而不类型的变量名不要使用isXxx的格式.因为布尔类型属性的getter方法与其他类型的不一样,是isSuccess(),如果在变量名之前加上is的话,属性名与方法名 ...

  3. pojo类中的布尔类型的变量为什么不能加is

    [强制] POJO类中的布尔类型的变量,都不不要加is,否则部分框架解析会引起序列化错误. 反例: 定义为基本数据类型boolean isSuccess:的属性,他的方法也是isSuccess();R ...

  4. Opencv RotatedRect类中的points、angle、width、height等详解

    在OpenCV 3.x中,经常要用到minAreaRect()函数求最小外接矩形(旋转矩形).该函数返回一个RotatedRect类对象. RotatedRect类定义如下: class CV_EXP ...

  5. 10_java中布尔类型的常量,大学JAVA期末考试试题带答案

    中考总分-徐州中考网 <JA V A程序设计>期末考试试题(三 一.单项选择题 1.如下哪个是Java中的标识符(D A.public B.super C.3number D.width ...

  6. 中yeti不能加载_第二十章_类的加载过程详解

    类的加载过程详解 概述 在 Java 中数据类型分为基本数据类型和引用数据类型.基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载 按照 Java 虚拟机规范,从 Class 文件到加载到内 ...

  7. python buildin 中的一些类中为什么方法的内容都是pass?

    python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...

  8. JAVA创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length)、宽(width)和高(heigth)

    编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w, i ...

  9. 《JAVA》编程创建一个Box类(长方体),在Box类中定义三个变量

    问题:编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...

  10. python中同一个类中方法之间的变量怎么调用

    class A:A = "你好"def test_a(self):self.m = "hello" #实例变量def test_b(self):self.tes ...

最新文章

  1. ASP.NET MVC+HighCharts开发统计图表
  2. Android 图形架构
  3. docker oom 排查过程
  4. 2022零售行业消费趋势新主张
  5. 安装pypcap = 安装flex:the fast lexical analyser + 安装libpcap-1.7.4
  6. android 不通过数据线打印日志_人人都可写代码-Android零基础编程-开发调试、APK编译04...
  7. 【clickhouse】clickhouse表引擎之MaterializeMySQL引擎
  8. CentOS7安装Portainer实现docker可视化操作
  9. 使用Motrix快速下载百度网盘文件
  10. 智慧环境应急平台建设方案
  11. 2018 python视频教程-自学python,怎能少得了教程
  12. 微信小程序分享功能的实现
  13. 基于SPSS的正态性检验方法汇总——以个股收益率为例(超详细)
  14. 排列(Permutation) 组合(Combination)
  15. java验证密码_java实现验证用户账号密码的功能
  16. Odoo相关资源(持续更新中)
  17. 怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
  18. [原]领带打法-半温莎结
  19. 【STM32H7】第4章 ThreadX FileX文件系统移植到STM32H7(SD卡)
  20. 时间序列 工具库学习(6) Darts模块-使用DataTransformer和Pipelin进行数据预处理

热门文章

  1. 计算机盘快捷键,电脑键盘快捷键全解
  2. Qt之QPA(linuxfb 一)
  3. 维宏控制卡四轴那个好_维宏维鸿四轴真四轴联动雕刻机运动控制卡说明书.doc...
  4. 右键添加cmd命令快捷键,右键cmd快捷键丢失
  5. 转为html5播放器插件,15个HTML5播放器插件
  6. cad统计面积长度插件vlx_cad计算面积插件免费版
  7. PDF 解锁(unlock)
  8. 天然气流量计选型指南
  9. python如何设计系统界面教程_python图形化界面设计tkinter!python用户界面设计教程...
  10. 大师级游戏建模教程:使用Maya和XGen进行角色制作