Java 字段命名避坑: success和isSuccess
前几天开发时踩了个坑,前端拿不到 isSuccess 的值,调接口看返回也确实有数据,排查了半天才发现是字段命名的问题。今天就把这个踩坑过程整理出来,希望能帮大家少走弯路。
Java Bean 的 getter/setter 规范
- 普通类型比如 int、String 这些,getter 是 getXxx (),setter 是 setXxx ()。就像 username 字段,对应 getUsername () 和 setUsername (),这部分大家基本都熟。
- 但布尔类型不一样,规范里 getter 是 isXxx () 而不是 getXxx ()。比如 success 这个布尔字段,getter 应该是 isSuccess (),setter 还是 setSuccess ()。
这个规则本身没问题,但当布尔字段名自带 is 前缀时,矛盾就出现了。
下面就是笔者踩中的坑
当时定义了一个接口返回结果类,想着让字段名直观些,就给布尔字段加了 is 前缀:
public class Result {
// 布尔字段带is前缀
private boolean isSuccess;
private String message;
// IDE自动生成的getter/setter
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
this.isSuccess = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
当后端返回Result对象时,
- 对于
getMessage():去掉get前缀,首字母小写 → JSON 字段名为message(符合预期); - 对于
isSuccess():去掉is前缀,首字母小写 → JSON 字段名为success(而非字段名isSuccess)。
最终序列化后的 JSON 是这样的:
{"success":true,"message":"操作成功"}
前端开发按字段名isSuccess接收数据(比如response.isSuccess),那自然对应不上, 也就接收不到数据了
为什么序列化工具依赖 getter 而非字段名?
后来查了下才明白,这和 Java 的封装思想有关:
- 字段通常是
private修饰的,外部本就不该直接访问,序列化工具尊重封装原则; - 灵活性更高:可以通过自定义 getter 修改序列化结果。例如字段
isVip,可通过isMember()getter 让 JSON 显示member字段。
解决方案:
最佳实践:布尔字段去掉 is 前缀
这是最符合规范、零成本的方案。将isSuccess改为success,其他代码不变:
public class Result {
// 布尔字段不带is前缀
private boolean success;
private String message;
// getter/setter
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
// ...其他方法
}
此时序列化后的 JSON 为{"success":true,"message":"操作成功"},前后端直接用success对接即可,完美契合直觉。
自定义 getter 方法
public class Result {
private boolean isSuccess;
private String message;
// 自定义getter,方法名改为getIsSuccess()
public boolean getIsSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
this.isSuccess = success;
}
// ...其他方法
}
序列化工具会解析getIsSuccess():去掉get前缀 → JSON 字段名为isSuccess。但这种方式不符合 Java Bean 规范,不推荐优先使用。
Java 字段命名避坑: success和isSuccess的更多相关文章
- Java避坑宝典《Java业务开发常见错误100例》上线了
写这个专栏的缘起 之前我写过一篇博客:<朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑>,引起的关注还是挺多的.后来和极客时间的编辑一拍即合决定以这个为题写一个专栏.其实所 ...
- 前端传数据到后台,后台用实体类接收不到引发的思考----Java bean中字段命名潜规则
1.按照Java语法规范,通常在实体类中的属性,首字母都是小写的.这是由于JavaBean的规范导致的.一般JavaBean属性都是首字母小写,以驼峰命名格式命名,相应的 getter/setter ...
- 双刃剑MongoDB的学习和避坑
双刃剑MongoDB的学习和避坑 MongoDB 是一把双刃剑,它对数据结构的要求并不高.数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档.所以我们在使用的过程中非常方 ...
- 15. Go 语言“避坑”与技巧
Go 语言"避坑"与技巧 任何编程语言都不是完美的,Go 语言也是如此.Go 语言的某些特性在使用时如果不注意,也会造成一些错误,我们习惯上将这些造成错误的设计称为"坑& ...
- 在mpvue中使用map如何避坑
最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...
- 避坑之Hadoop安装伪分布式(Hadoop3.2.0/Ubuntu14.04 64位)
一.安装JDK环境(这个可以网上随意搜一篇教程了照着弄,这里不赘述) 安装成功之后 输入 输入:java -version 显示如下说明jdk安装成功(我这里是安装JDK8) 二.安装Hadoop3. ...
- 今天 1024,为了不 996,Lombok 用起来以及避坑指南
Lombok简介.使用.工作原理.优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码. 目录 L ...
- java开发命名规范
使用前注意事项: 1. 由于Java面向对象编程的特性, 在命名时应尽量选择名词 2. 驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首 ...
- java开发命名规范(转载)
java开发命名规范 使用前注意事项: 1. 由于Java面向对象编程的特性, 在命名时应尽量选择名词 2. 驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而 ...
- java开发命名规范总结
一 包名的书写规范 (Package)推荐使用公司或机构的顶级域名为包名的前缀,目的是保证各公司/机构内所使用的包名的唯一性.包名全部为小写字母,且具有实际的区分意义. 1.1 一般要求1.选择有意义 ...
随机推荐
- leetcode 224
简介 简易计算器 一时半会儿没写出来,看了官方题解. 感觉思路是遇到 ( 前一个操作符号,入栈,遇到 ) 栈中弹出操作符号 遇到 + 符号为栈顶符号 遇到 - 符号为 栈顶符号的反符号 官方使用栈来保 ...
- C++线程池 基于C的实现 学习1
简介 线程池是什么? 打饭的阿姨们 前去吃饭的人们,任务 管理组件 线程池由三部分组成 执行队列,线程s 任务队列,任务s 管理组件 类似于 银行营业厅 食堂打饭 每个打饭的人都是一个线程 管理制度 ...
- 谷云科技iPaaS V7.0+企业级AI Agent产品全新发布
当下,大数据.人工智能等前沿技术迅猛发展,正以前所未有的速度重塑着企业 IT 集成的格局.谷云科技作为深耕国内集成领域多年的专业厂商,始终紧跟技术趋势变化,深度洞察客户需求,致力于以创新驱动为企业数字 ...
- Philosophy-History of Western Philosophy: 西方哲学史: 20世纪 西方哲学发展方向: 传统意识哲学的突破 - 从 马克思 到德勒兹 的 哲学革命
Philosophy-History of Western Philosophy: 西方哲学史: 20世纪 西方哲学发展方向: 清华大学哲学系: https://www.phil.tsinghua.e ...
- mockito测试final类/static方法/自己new的对象
先准备几个类,方便后面讲解: public final class FinalSampleUtils { public static String foo() { return "aaa&q ...
- mysql查看表/索引大小
直接上sql(参考下面的语句,把表名改一改即可) SELECT DATA_LENGTH / (1024 * 1024 * 1024) AS 'DATA_SIZE(GB)', INDEX_LENGTH ...
- LIS系统连接设备,双向自动上机检测-九五小庞
注:仪器为:LabConsole1.条形码扫描过程如下:(1).操作员把贴有条形码的试管放到样本盘.(2).点击LabConsole的"开始"按钮.(3).设备开始扫描条形码.(4 ...
- 全链路管控 多手段防数据泄漏 | H电力公司的数据保护创新之路
随着电力行业信息化的不断发展,其内部信息系统越来越复杂,数据库作为信息系统的核心和基础,承载着越来越多的关键业务信息.同时,国家对信息安全方面的重视程度也逐步加深:2014年7月2日,国家能源局发布& ...
- 读《我加载了恋爱游戏》(by掠过的乌鸦)
读书经过 事情发生于寒假请假在家的一个下午,闲来无事刷b站,看到up主凌凌上将带老爸看小说女主的视频(因为<我真没想重生啊>点进去的),出现清野凛.然后由于推送机制加上之前也被推过,我就看 ...
- 网络尖刀团队荣获蚂蚁集团2024年度最佳安全团队称号 kuzai2摘得个人第二
2025年6月14日,杭州--蚂蚁集团安全响应中心(AntSRC)年度颁奖盛典暨"AI时代下的网络安全技术探讨与AI大模型攻防之道"主题峰会在杭州隆重举行.本次盛会汇聚了网络 ...