当boolean值类型的属性被定义为isXX时,有些序列化框架(如jackson)序列化过程中会把is省略,而有些框架(如gson)则不会,如下图

package com.juneyaoair.qwp.eurekaclient.bean;import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;public class Apple {private String color;private int weight;private boolean isSold;private Boolean isGood;public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public boolean isSold() {return isSold;}public void setSold(boolean sold) {isSold = sold;}public Boolean getGood() {return isGood;}public void setGood(Boolean good) {isGood = good;}public static void main(String[] args) throws Exception{ObjectMapper mapper = new ObjectMapper();Apple apple = new Apple();apple.setColor("red");apple.setSold(true);apple.setGood(true);apple.setWeight(10);String jsonValue = mapper.writeValueAsString(apple);System.out.println(jsonValue);System.out.println(new Gson().toJson(apple));}
}

运行结果:

{"color":"red","weight":10,"good":true,"sold":true}
{"color":"red","weight":10,"isSold":true,"isGood":true}

原因:

jackson使用get/set方法为对象赋值而gson使用反射获取属性名为对象赋值。而javaBean的boolean类型属性的get方法为isXXX,如果你将属性名定义为isXXX时,get方法名就变成与属性名同名所以jackson框架就将属性序列化成XXX省略了is。

解决方案:

使用各框架的序列化别名注解直接指定想要的序列化名字,如jackson框架使用注解 @com.fasterxml.jackson.annotation.JsonProperty

思考:

既然会导致这样的问题就让我想到了编码规范,一些不规范的编码会导致某些框架出现不可预期的问题。于是我查了一下,布尔值类型的属性使用is开头来命名确实属于不规范的编码,阿里巴巴编码规范中明确规定boolean类型的属性不能使用is开头来命名。

java 序列化boolean时属性名前的is被遗漏的原因、解决方案及思考相关推荐

  1. 属性名前两个字母要么都是大写的要么都是小写的(当然数字与_、$算小写)

    属性名前两个字母要么都是大写的要么都是小写的(当然数字与_.$算小写) 2015年08月09日 16:44:42 DO IT 阅读数:1079 标签: java属性名 关于属性名 "属性名前 ...

  2. java 反射机制--根据属性名获取属性值

    1.考虑安全访问范围内的属性,没有权限访问到的属性不读取 [java] view plaincopy /** * 根据属性名获取属性值 * * @param fieldName * @param ob ...

  3. 响应对象转json时属性名大小写问题完美解决

    首先:案例是model里的属性名大写,http response时json默认变成小写开头,和model属性不一致. 例子: model为: class User{private String NAM ...

  4. fastjson将对象转为json时属性名首字母会默认小写,如何自定义

    Java对象属性名 private String SrOrder; 得到的json为srOrder而不是SrOrder,而我们想要SrOrder这个key 只需要在属性名上加上@JSONField(n ...

  5. 关于java中创建对象时属性的初始化过程

    java是一种面向对象的编程语言,那么了解创建对象时程序会怎么执行就变得尤为重要,下面我们就一起看看在我们使用new关键字创建对象时是怎么对属性初始化的: 下面是一个Person类,其中有成员变量ag ...

  6. java 注解之省略属性名value

    注解说明 解释:当使用注解,仅给value属性赋值时,此时value属性可以省略,只写属性值.

  7. Java编写程序时出现警告:Resource leak: 'xxx' is never closed 解决方案

    菜鸟新手,学校在教Java,作业里面要求我们编程实现运算一个简单的程序,程序写好了,却发现冒出一个警告,如下图: 百度了一下,意思是申明了名为a的数据输入扫描仪(Scanner),系统就会为它分配相应 ...

  8. java 首字母小写_Java中属性名首字母大小写问题

    Java命名规范中,实体类属性名以小写字母开头,但并没有说不能以大写字母开头 手动编写实体类时,将属性companyName的首字母大写 使用IDE自动生成构造函数 public Custom(lon ...

  9. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

最新文章

  1. 高频小功率三极管-S9018
  2. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
  3. hdu5955 Guessing the Dice Roll【AC自动机】【高斯消元】【概率】
  4. PHP漏洞之session会话劫持
  5. 程序员35岁不转型就退休,是真的吗?
  6. 2018蓝桥杯省赛---java---B---7(螺旋折线)
  7. mysql in 命令
  8. 再问数据中台 - 数据中台建设的最大的挑战是什么
  9. python open函数参数_python open函数的用法笔记
  10. 10种K线组合给出买进信号
  11. java中改变文本字体和大小_Java实训——编写一个窗体程序,可以对文本区中的文字设置字体和大小。...
  12. Android应用分析进阶教程之一- 初识JEBAPI
  13. 树算法系列之三:GBDT
  14. 基于Java的网上订餐系统(附:源码 课件)
  15. 7-5 游客检票 - 实验3 简单的计算及输入输出 -《Python编程基础及应用实验教程》(高等教育出版社)
  16. T6 根据书籍条形码ISBN查询书籍,完整的方案,可安装
  17. AutoCAD的下载与安装
  18. 【TF2基础教程1】结构化数据建模流程
  19. 阿里云服务器ECS怎么重装系统?
  20. MySQL 数据库 分组查询

热门文章

  1. mysql自增id与uuid的区别
  2. 人工智能写一封种子信,真诚又用心(挽回必备神器)
  3. 计算机上可移动磁盘,win10系统我的电脑出现很多个可移动磁盘的解决方法
  4. 大话手游网页无法链接到服务器,大话西游手游网页版IE浏览器设置教程 IE浏览器问题解决指南...
  5. 苹果公司的企业文化_陈少峰:互联网文化产业主流的商业模式
  6. 网易Java面试必问:月薪20k+的Java面试都问些什么
  7. 1522-对称矩阵的判定
  8. [linux|Ubuntu]安装杂牌扫描仪-方正F5580
  9. 4.位运算和逻辑运算(带例题)
  10. 永恩上线服务器维护,LOL:永恩刚上线两天就被针对?Doinb直言:接下来的比赛不让用!...