关于boolean类型isXxx的问题【2024-01-31】

1.0、见解文章:

https://blog.csdn.net/yuechuzhixing/article/details/124775266

1.1、问题来源

对于基础平台的响应体中,命名只有三个字段信息:codemsgdata,但是在响应的时候会莫名其妙出现一个ok字段。

如下是一个该问题的简单demo

响应体:

@Data
public class R<T> {private int code;private String msg;private T data;public static <T> R<T> ok() {return restResult(null, 0, null);}static <T> R<T> restResult(T data, int code, String msg) {R<T> apiResult = new R<>();apiResult.setCode(code);apiResult.setData(data);apiResult.setMsg(msg);return apiResult;}public boolean isOk() {return this.code == 1;}}

控制层:

@RestController
@RequestMapping("/demo")
public class Democontroller {@PostMapping("/test")public R excelTest(){return R.ok();}}

响应:

{"code": 0,"msg": null,"data": null,"ok": false
}

1.2、问题原因

上述问题的原因是如下这个代码产生的

public boolean isOk() {return this.code == 1;
}

1.3、原因分析

阿里巴巴发布的java开发手册中强制规定,布尔类型的数据,无论是boolean还是Boolean都不准使用isXXX来命名,否则部分框架在解析的时候会引起序列化错误。

首先来了解一下,基础类型和包装类的getter和setter方法的命名规范(可以参照@Data自动生成):

  • 对于非boolean类型的变量,getter和setter方法的命名规范都是以get和set开头的
    参数 = xxx
    getter = getXxx
    setter = setXxx

  • 对于boolean类型的变量,setter方法是以set开头,但是getter方法的命名的命名规范是以is开头
    参数 = xxx
    getter = isXxx
    setter = setXxx

  • 对于包装类的变量,getter和setter方法的命名规范都是以get和set开头的
    参数 = xxx
    getter = getXxx
    setter = setXxx

再是了解一下序列化和反序列化:

序列化和反序列化是将对象转换为字节流(序列化)以及将字节流恢复为对象(反序列化)的过程。

  • 序列化是指将对象转换为字节流的过程。在Java中,可以通过实现Serializable接口来标记一个类可序列化。当一个对象需要进行序列化时,它的状态信息(属性值)会被写入到字节流中,包括对象的类型、属性名和属性值等。序列化后的字节流可以保存到文件、数据库或通过网络进行传输。
  • 反序列化是指将字节流恢复为对象的过程。在Java中,可以使用ObjectInputStream类来进行反序列化操作。通过读取字节流,反序列化过程会根据字节流中的信息重建出原始对象,包括对象的类型、属性名和属性值等。

在RPC框架进行远程调用的时候涉及到序列化和序列化,在反序列化的时候,当遇到boolean方法,且是isXxx前缀的,有些框架会默认解析成存在xxx属性。因此,对于boolean类型的属性值,不建议设置为is开头,否则会引起RPC框架的序列化异常。

1.4、扩展内容

关于基本数据类型与包装数据类型的使用标准:

1)【强制】所有的 Pojo 类属性必须使用包装数据类型

2)【强制】RPC方法的返回值和参数必须使用包装数据类型。

3)【强制】所有的局部变量使用基本数据类型

说明:Pojo类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE 问题,或者入库检查,都由使用者来保证。

正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。

反例:比如显示成交总额涨跌情况,即正负x%,x为基本数据类型,调用的 RPC服务,调用不成功时,返回的是默认值,页面显示为0%,这是不合理的,应该显示成中划线。所以包装数据类型的 null值,能够表示额外的信息,如:远程调用失败,异常退出。

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

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

相关文章

安装GPU版本Pytorch(全网最详细过程)

目录 一、前言 二、安装CUDA 三、安装cuDNN 四、安装Anacanda 五、安装pytorch 六、总结 一、前言 最近因为需要安装GPU版本的Pytorch&#xff0c;所以自己在安装过程中也是想着写一篇博客&#xff0c;把整个过程记录下来&#xff0c;在整个过程中也遇到了不少的问题&a…

Vite 官方文档速通

前言&#xff1a;参考 Vite 官网 一. 指引 1. 为什么选择 Vite 1.1 现实问题 问题&#xff1a;当项目中 JS 代码量变多&#xff0c;就会导致&#xff1a;1. 启动开发服务慢&#xff08;几分钟&#xff09;。2&#xff0c;模块热替换&#xff08;HMR&#xff09;慢&#xff0…

Java List中对象根据id去重,并处理重复对象的某个字段

List中对象根据id去重 一、需求二、解决 一、需求 参考文章:https://blog.csdn.net/A_Gui_Code/article/details/106978867 对在list集合中对象根据主键id去重&#xff0c;同时需要对重复对象的某个字段进行单独处理。 例如&#xff0c;对象包含字段如下, 当某个对象重复时&a…

nignx日志定时清理、Windows 清理nignx日志、linux 清理nignx日志

因为项目日志老占磁盘空间&#xff0c;记录一下优化配置文件&#xff1a; 针对linux清理&#xff1a; 1.创建一个名为 cleanup_nginx_logs.sh 的脚本文件 nano cleanup_nginx_logs.sh 2.在打开的文本编辑器中&#xff0c;将以下内容复制并粘贴到文件中&#xff1a; #!/bin…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

状态压缩 笔记

棋盘式的f[i][j]中表示状态的j可以是状态本身也可以是在合法状态state中的下标 用状态本身比较方便&#xff0c;用下标比较省空间 用下标的话可以开id[M]数组记录一下 蒙德里安的梦想 求把 NM的棋盘分割成若干个 12的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0…

【Redis】一文搞懂redis的所有知识点

目录 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; 2.说说Redis的基本数据结构类型 2.1 Redis 的五种基本数据类型​编辑 2.2 Redis 的三种特殊数据类型 3. Redis为什么这么快&#xff1f;​编辑 3.1 基于内存存储实现 3.2 高效的数据结构 3.3 合理的数据编…

新火种AI|哄哄大模型的火爆,给了普通人AI创业破局的关键

作者&#xff1a;一号 编辑&#xff1a;美美 人们似乎更喜欢把AI当做玩具&#xff0c;而非工具。 近日&#xff0c;一款名为哄哄模拟器的AI原生应用火了&#xff0c;一天之内就吸引了60万用户。 哄哄模拟器设置了多种情侣吵架场景&#xff0c;无论你是男是女&#xff0c;都…

光伏设计系统都具备哪些功能?

随着可再生能源的日益重要&#xff0c;光伏能源已成为我们能源结构中的重要组成部分。而光伏设计系统作为实现光伏能源高效利用的关键&#xff0c;其功能也日益丰富和多样化。本文将探讨光伏设计系统所具备的主要功能。 1.数据分析与模拟 光伏设计系统能够对大量的数据进行分…

【经典项目】Java小游戏 —— 贪吃蛇

一、需求分析 当提到贪吃蛇游戏时&#xff0c;通常是指一款经典的电子游戏&#xff0c;玩家通过操作一个蛇在屏幕上移动&#xff0c;目标是吃掉各种食物并尽量避免碰撞到自己的身体或游戏区域的边界。 贪吃蛇游戏最早出现在20世纪70年代末的个人电脑上&#xff0c;后来在各种游…

【CSS】动画(Transform,Transition,Animation)

CSS3属性中关于制作动画的三个属性&#xff1a;Transform,Transition,Animation。 transform 描述了元素的静态样式&#xff0c;本身不会呈现动画效果&#xff0c;可以对元素进行旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix。 div{transform:scale(2…

行为型设计模式—访问者模式

访问者模式&#xff1a;将数据结构对象与数据操作分离的设计模式&#xff0c;可以在不改变数据结构对象类结构的前提下定义作用于这些对象的新的操作。 访问模式结构&#xff1a; 访客接口 &#xff08;Visitor&#xff09; 声明了一系列以表示对象结构的具体元素为参数的访问…

使用 Paimon + StarRocks 极速批流一体湖仓分析

摘要&#xff1a;本文整理自阿里云智能高级开发工程师王日宇&#xff0c;在 Flink Forward Asia 2023 流式湖仓&#xff08;二&#xff09;专场的分享。本篇内容主要分为以下四部分&#xff1a; StarRocksPaimon 湖仓分析的发展历程使用 StarRocksPaimon 进行湖仓分析主要场景和…

ONLYOFFICE是一站式协作免费开源办公神器

一、前言 众所周知&#xff0c;我们工作都离不开办公软件&#xff0c;一个好的办公软件可以大幅度提高工作效率&#xff0c;就目前市场而言&#xff0c;常见的办公软件有微软的 Microsoft Office 以及国产的 WPS Office&#xff0c;微软的 Microsoft Office是付费的&#xff0…

在JAVA中如何删除ZIP等等的压缩文件

删除ZIP文件的步骤和要点 JAVA中文件的类型在JAVA中能够被删除的文件类型问题&#xff1a;既然如此&#xff0c;那为什么有时候会遇到文件无法被删除的问题&#xff1f;心得总结 JAVA中文件的类型 在Java中&#xff0c;只存在两种文件类型&#xff0c;一种是文件夹&#xff0c…

postgresql和kingbase关于模糊查询大小写兼容问题

在mysql中&#xff0c;会有相关的like关键词&#xff0c;并且默认的是忽略大小写的。但是在postgresql和kingbase中&#xff0c;只有ilike关键字&#xff0c;并且默认是大小写敏感的。当我们使用mybatisplus的时候&#xff0c;默认提供的api也只有like()。这里提供一种方式来对…

CANoe实际项目中文件夹的规划

本人&#xff0c;之前设计了一个CANoe工程&#xff0c;由于工程设计之初没有设计好文档的归纳分类&#xff0c;导致文件查找起来非常费劲。 为了避免以后出现文件混乱&#xff0c;不可查找的问题&#xff0c;故特此归纳说明。 建立工程时&#xff1a; 第1步就应该设计好文档…

基于51单片机的加油站计费系统

基于51单片机的加油站计费系统[proteus仿真] 计费检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个108基于51单片机的加油站计费系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#…

“软件老兵”的新征程:从代码到方案,40岁转身更显智慧锋芒

在快速迭代的软件行业&#xff0c;许多经验丰富的软件工程师&#xff0c;随着年岁的增长&#xff0c;发现自己在纯技术领域的竞争力似乎逐渐不敌那些刚刚踏入职场的00后工程师。 面对这一挑战&#xff0c;一些“软件老兵”选择转换跑道&#xff0c;将目光投向了方案工程师这一新…

EasyExcel实现三级联动

前言 项目中需要在导出的模板中新增三级联动的功能&#xff0c;类似省市区的联动。在网上找了一些方法&#xff0c;都不能直接使用&#xff0c;需要进行修改。本文主要分享一下&#xff0c;改后的代码&#xff0c;可以直接使用。 代码 public class CascadeWriteHandler imp…