信息技术网站建设专业,免费网站入口在哪,深圳网站建设 合作品牌,网站规划教学设计在 Java 后端开发中#xff0c;我们常常会遇到这样一个问题#xff1a; #x1f4ad; 某个字段在后端需要保留原始格式进行业务处理#xff0c;但返回给前端时希望转为另一种格式展示。 比如#xff1a;你在数据库中保存的是 tokens 12500#xff08;整型#xff09;我们常常会遇到这样一个问题 某个字段在后端需要保留原始格式进行业务处理但返回给前端时希望转为另一种格式展示。 比如你在数据库中保存的是 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 的展示格式 如果你想继续优化返回结构比如返回对象中的多个字段进行统一格式转换甚至封装公共转换器我也可以为你提供完整的方案和代码模板欢迎继续提问