当前位置: 首页 > news >正文

深入理解 @JsonGetter:精准掌控前端返回数据格式!

在 Java 后端开发中,我们常常会遇到这样一个问题:

💭 某个字段在后端需要保留原始格式进行业务处理,但返回给前端时希望转为另一种格式展示。

比如:你在数据库中保存的是 tokens = 12500(整型),但希望返回给前端的时候是 12.500(千分制,小数点后保留 3 位)。

这时候,Jackson 提供的注解 —— @JsonGetter 💡 就能大显身手!

🔍 什么是 @JsonGetter

@JsonGetter 是 Jackson 提供的序列化注解之一,作用是:

指定某个方法用于序列化字段时的 JSON 值获取逻辑

📌 也就是说,默认情况下 Jackson 会调用字段的 getter 方法(如 getTokens()),但如果你加上了 @JsonGetter("tokens"),它会优先使用你标注的方法作为序列化输出。

🛠 实际用法:原始字段用于业务,自定义方法用于 JSON 序列化

下面是一个实际场景示例:

public class TokenUsage {// 原始字段:单位是“个”,如 12500 个private String tokens;// 原始 getter 方法,供后端业务逻辑使用public String getTokens() {return tokens;}public void setTokens(String tokens) {this.tokens = tokens;}// 自定义 JSON 输出格式:返回千分单位,并保留 3 位小数@JsonGetter("tokens")public String getTokenRaw() {if (tokens == null) {return null;}// 精确计算,避免浮点误差BigDecimal value = new BigDecimal(tokens).divide(new BigDecimal(1000), 3, RoundingMode.HALF_UP);return value.setScale(3, RoundingMode.HALF_UP).toString();}
}

✅ 效果如下:

场景返回结果
后端使用 getTokens()返回 "12500"(字符串)
前端收到 JSON 响应返回 "12.500"

🚀 优势总结

优势 💡描述
🔄 保留后端原始数据不影响业务逻辑处理,原始 getter 可照常使用
🧪 精准控制前端格式自定义方法决定序列化样式
🧼 避免字段冗余无需新增冗余字段,仅通过注解控制输出
💥 与 @JsonIgnore@JsonProperty 兼容可组合使用,控制更灵活


❗注意事项

  • 方法名不一定要以 get 开头,只要加上 @JsonGetter("xxx"),序列化时就会使用它作为 xxx 字段的值。

  • 千万不要和原始字段名冲突,否则会出现双字段或冲突序列化的问题。

  • 一般只用于输出,如需控制输入格式,需配合 @JsonSetter@JsonProperty 使用。

📎 小贴士:增强阅读体验的小工具建议

为了让这个字段在 Swagger 或 OpenAPI 接口文档中也显示为处理后的格式,可考虑:

@ApiModelProperty(value = "令牌数(单位:千,保留3位小数)", example = "12.500")
@JsonGetter("tokens")
public String getTokenRaw() {// ...
}

 

🧩 总结一句话:

使用 @JsonGetter,你可以在不影响后端原始逻辑的前提下,优雅地控制前端 JSON 的展示格式


如果你想继续优化返回结构,比如返回对象中的多个字段进行统一格式转换,甚至封装公共转换器,我也可以为你提供完整的方案和代码模板!欢迎继续提问 🤝💬

相关文章:

  • 26考研 | 王道 | 计算机组成原理 | 七、输入输出系统
  • PHP设计模式实战:领域驱动设计与六边形架构
  • life long learning
  • 线上故障诊断黑魔法:基于/proc目录的无工具排查体系
  • 并发编程-ReentranLock
  • Git:现代开发的版本控制基石
  • 高效解决Java内存泄漏问题:方法论与实践指南
  • 《信号与系统》第 9 章 拉普拉斯变换
  • npm安装electron报错权限不足
  • swm341s map文件和sct文件解析
  • arcsin x
  • 一阶低通滤波器完整推导笔记
  • 斗式提升机的负载特性对变频驱动的要求
  • 声波下的眼睛:用Python打造水下目标检测模型实战指南
  • Android 中 linux 命令查询设备信息
  • 阳台光伏新风口!安科瑞ADL200N-CT/D16-WF防逆流电表精准护航分布式发电
  • 完美解决openpyxl保存Excel丢失图像/形状资源的技术方案
  • 几种经典排序算法的C++实现
  • 软考高级系统规划与管理师备考经验
  • Atlassian AI(Rovo)在不同场景中的实际应用:ITSM、HR服务、需求管理、配置管理
  • 建网站选哪个/潮州网络推广
  • 建筑专业网站/网店如何引流与推广
  • 贵阳市花溪区建设局网站/阜新网络推广
  • 网站建设网站备案所需资料/苏州seo公司
  • 珠海市企业网站制作平台/域名注册万网
  • 3d web做的网站/百度关键词seo排名软件