【Java】POJO类的属性不要命名为isXXX的问题描述,复现,解决方法

news2024/11/25 10:31:55

问题描述

POJO的属性是布尔类型的时候,采用is_xxx的命名方式,出现参数无法找到的情况

问题复现

Boolean 的属性命名为isA,但是它的getter和setter自动取消了is

public class Person {  
    Boolean isA;  
  
    public Boolean getA() {  
        return isA;  
    }  
  
    public void setA(Boolean a) {  
        isA = a;  
    }  
}

前后端传递对象通过fastjson序列化

Person person = new Person();  
person.setA(true);  
System.out.println(person);  
  
// 将Java对象转换为json字符串  
String jsonString= JSON.toJSONString(person);  
System.out.println(jsonString);
Person{isA:true}
{"a":true}

可以看到经过序列化后的对象的isA属性变成了a,因此前端就可能出错

前端传过来json,后端解析错误

String jsonString = "{\"isA\":true}";  
// 将json反序列化为Java对象  
Person person1 = JSON.parseObject(jsonString,Person.class);  
System.out.println(person1);
Person{isA:null}

原因

  1. 在idea自动生成getter和setter的时候,自动忽略了is
  2. fastjson序列化的时候,遍历getter,去掉get,后面的当作属性名,
  3. fastjson反序列化的时候,属性名加上set,遍历setter

解决方法

1.更正getter和setter(不推荐)

1.1手动更正,太麻烦

public Boolean getIsA() {  
    return isA;  
}  
  
public void setIsA(Boolean a) {  
    isA = a;  
}

1.2更正idea的代码模板,但是不符合大众的习惯

  • 解决当boolean类型的变量命名由is开头时,IDEA自动生成get、set方法的问题 - 复制粘贴一把梭 - 博客园 (cnblogs.com)

1.3 使用lombok,不是所有项目都会用
image.png

2. 更正属性命名isXXX为XXX(推荐)

遵循这样的编码命名规范,那么所有的问题都会得到解决,最简单
这也是阿里手册建议的
image.png

3. 更换序列化方式(不推荐)

序列化方式有两种

  1. jdk原生
  2. json
    1. fastjson
    2. jackson
    3. gson
      fastjson 和jackson都是通过getter和setter来为属性赋值的,但是gson是直接通过属性来赋值,因此也不会出现上面的问题

但是国内项目用fastjson还是比较多的,jackson是springboot默认的

拓展

属性命名一般不要使用基本数据类型
使用boolean的情况略有不同,无论是idea自动生成还是lombok的get方法都变为isA()

boolean isA;  
  
public boolean isA() {  
    return isA;  
}  
  
public void setA(boolean a) {  
    isA = a;  
}

image.png

但是出现的问题和上面是一样的

默认值不是null,是false,在一些情况下是逻辑不合理的,因此不建议使用基本数据类型作为属性,这也是阿里手册强制的
image.pngimage.png

参考资料

  • 解决当boolean类型的变量命名由is开头时,IDEA自动生成get、set方法的问题 - 复制粘贴一把梭 - 博客园 (cnblogs.com)
  • java 序列化boolean时属性名前的is被遗漏的原因、解决方案及思考_对象序列化 布尔值加is_500InternalServerErr的博客-CSDN博客
  • POJO类中布尔类型的变量都不要加is前缀详解 - flunggg - 博客园 (cnblogs.com)
  • 为什么阿里巴巴开发手册强制规定POJO 类中布尔类型的变量,都不要加 is 前缀_o慕容紫英o的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

locust学习教程(4) - 命令行参数

前言 一句话总结:命令行参数、环境变量、配置文件 1、所有命令行参数 1.1、常用场景参数解读 1.1.1、无web界面,定时运行,数据存储在csv中: locust -f per_01_test.py --headless -u 10 -r 1 -t 1m -s 120 --csvexample --head…

locust学习教程(1)- 概念相关

前言 一句话总结:本文是基于2.4.1的版本去学习locust,如果你想完全搞懂它,那么就从最新的产品文档从头到尾去研读一遍吧。 1、locust是什么? 1.1、相关资料 官网:www.locust.io/产品文档:docs.locust.io…

光伏电站并网雷电防护措施探讨 安科瑞 许敏

摘要: 本文指出了雷击对并网系统光伏电站的主要危害形式及所对应的雷电防护措施。依据相关的防雷及电气接地规范,针对并网系统光伏电站提出了防雷设计方案并做了详细的阐述。在光伏电站的防雷设计中,应考虑雷电会通过何种形式对哪些设施造成损害&#xf…

玩转系统|完美替代ChatGPT!Claude注册教程及出现问题解决方案

目录 1、什么是ChatGPT? 2、什么是Claude? 3、为什么推荐Claude? 3.1、Claude特性 4、注册 slack 5、Claude添加到Slack 6、出现APP Unavailable问题 7、如何解决该问题 8、使用感受 8、1代码测试 8、2文学测试 8、3英语测试 1、什么是ChatGPT&a…

防溺水智能预警监控系统解决方案

一、方案背景 随着夏季暑期的到来,孩童、学生溺水的警钟又不断敲响。预防夏季溺水,不仅要求学校方面要加强安全宣传教育,同时相关部门也需要加强对河流、湖泊、水库、池塘等水域的监控和人员靠近预警。 目前水库、河湖、堤坝、河湖岸线、深水…

图观 智慧交通合集 | 9大行业细分应用案例 一次性看个够!

随着城市化进程的加速和交通需求的不断增长,城市交通系统的安全、高效、智能化的要求越来越高,智慧交通正成为现代城市发展的必然趋势。数字孪生技术的出现,为智慧交通领域的应用提供了更为广阔的空间。 数字冰雹深耕数字孪生行业十余载&…

【Java高级语法】(九)IO流:肝了三天三夜,我打赌没有比我这边更细的探索Java I\O流的文章了~

Java高级语法详解之IO流 :one: 概念1.1 输入流和输出流1.2 字节流和字符流 :two: 优势和缺点:three: 使用3.1 File 类3.2 RandomAccessFile 类3.3 字节流3.3.1 文件字节流3.3.2 缓冲字节流3.3.3 基本数据类型字节流3.3.4 打印流3.3.5 对象序列化流3.3.6 字节数组流 3.4 字符流3…

论文笔记 - 对话系统中的 OOD (Out of Domain出域)问题

徐阿衡 人工智能与机器学习工程师 最近看了下 2021年关于 OOD 的几篇 paper,记录一下~ 对话系统中的 domain 都是预先定义好的,而在实际应用场景中,会有很多现有系统回答不了的问题(out of the design scope)&#…

locust学习教程(3)- 编写locust脚本

前言 一句话总结:并发的用户执行了第一类测试任务、第二类测试任务,设置所有类的测试前置、测试后置,设置每一类测试任务的测试前置,测试后置。 1、概念 1.1、一个完整的脚本示例 from locust import task, HttpUser, constant…

ASEMI代理光宝光耦LTV-50L的工作原理及应用领域

编辑-Z 本文将对光耦LTV-50L进行详细的介绍,包括其工作原理、性能特点、应用领域以及注意事项。通过阅读本文,您将对光耦LTV-50L有更深入的了解,以便在实际应用中更好地发挥其作用。 1、光耦LTV-50L的工作原理 光耦LTV-50L是一种光电器件&a…

uni-table 表格的封装

文章目录 项目场景:实现效果创建表格组件文件页面中使用实现方法 项目场景: 在实际的应用场景中,表格是一个非常常见的需求,如果每一个的表格都自己去手写的话非常的浪费时间,并且当中的代码冗余量非常大,…

Python--元组

Python--元组 <font colorblue>一、创建元组<font colorblue>二、访问元组元素<font colorblue>三、元组的增、删、查、改<font colorblue>1、添加元素<font colorblue>2、删除元素<font colorblue>3、查找元素<font colorblue>4、修…

甄品进化 | 燕小千智能助手,用AIGC撬动企业知识宝藏

背景&#xff1a;2022年AIGC&#xff08;AI-Generated Content,人工智能生成内容&#xff09;这个新概念横空出世&#xff0c;不仅被消费者追捧&#xff0c;而且备受投资界的关注&#xff0c;更是被技术和产业界竞相追逐。2022年12月&#xff0c;OpenAI的大型语言生成模型ChatG…

Android 60问60答 (一篇复习整个Android)

Android 60问60答 &#xff08;一篇复习整个Android&#xff09; 有哪些移动端平台&#xff1f; 厂商开发平台&#xff1a; los 黑莓&#xff08;blackBerry&#xff09; 第三方私有平台&#xff1a;第三方开发供移动设备厂商使用 WindowsMobile 免费开源平台&#xff1…

微信小程序克隆到运行

1.git克隆 2.安装依赖 npm i 如果遇到卡在node lib/install.js 一直不进行 重新运行安装&#xff1a;(https://www.python100.com/html/3716RLP8FZM2.html) npm install --ignore-scripts理解npm install --ignore-scripts 3.安装完运行 npm run serve如果报错&#xff1a; …

基于改进多目标粒子群算法的配电网储能选址定容——附Matlab代码

目录 摘要&#xff1a; 主要内容&#xff1a; 程序思路&#xff1a; 储能选址定容优化模型&#xff1a; &#xff08;1&#xff09;节点电压波动&#xff1a; &#xff08;2&#xff09;负荷波动&#xff1a; &#xff08;3&#xff09;储能系统容量&#xff1a; 改进的…

2023年最好用的办公AI工具,让你工作效率提升10倍!

2023年是AI工具大爆发的一年&#xff0c;在效率办公领域&#xff0c;同样涌现出了很多优秀的AI办公工具&#xff0c;小编亲测了几款&#xff0c;都是宝藏好用的App&#xff0c;以下排名不分先后&#xff0c;一起来看看吧&#xff01; AI办公工具哪个好 GitMindNotion AI酷表C…

智能优化算法之黏菌优化算法(SMA),附matlab代码

黏菌算法是2020年提出的一种智能优化算反&#xff0c;主要模拟的是自然界中多头绒泡菌在不同食物浓度下的觅食行为以及状态变化。黏菌主要分泌酶来消化食物&#xff0c;黏菌的前端延伸成扇形&#xff0c;后端由相互连接的静脉网络包围。环境中不同浓度的食物影响着黏菌静脉网络…

C语言数据在内存中存储---整型提升练习

前言&#xff1a;学习了C语言中的整型提升&#xff0c;总是感觉听的时候很明白&#xff0c;但当自己做题的时候&#xff0c;又总是遗漏了哪一步。自己的感悟&#xff1a;整型提升步骤以及原理都一样&#xff0c;就是把步骤记清楚一步一步的来就行。因此通过下面的一道题来每日复…

【正点原子STM32连载】第三十七章 485实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第三…