You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jackson中为特定类配置setter与getter的自定义命名约定

解决方案

适用Jackson 2.12+版本(你当前使用的v2.13完全支持)

你之前看到的@JsonPOJO是功能提案阶段的临时命名,正式发布后调整为@JsonAccessorNaming注解,仅需在类上添加该注解,指定访问器命名策略为BASE_NAME即可实现需求:

import com.fasterxml.jackson.databind.annotation.JsonAccessorNaming;
import com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy;

@JsonAccessorNaming(AccessorNamingStrategy.Strategies.BASE_NAME.class)
class MyModel{
  private String first;
  private int second;

  public String first(){
    return this.first;
  }

  public void first(String value){
    this.first = value;
  }

  public int second(){
    return this.second;
  }

  public void second(int value){
    this.second = value;
  }
}

BASE_NAME策略的逻辑为:

  • 无参非void返回值的方法直接识别为getter,方法名作为JSON字段名
  • 单参void返回值的方法直接识别为setter,方法名作为JSON字段名
    完全匹配你无get/set前缀、方法名和JSON字段名完全一致的要求,配置仅作用于当前注解的类,无需全局调整,也不用为每个setter/getter单独加@JsonProperty注解。

低版本Jackson兼容方案

如果使用低于2.12的Jackson版本,可以通过在类上添加@JsonAutoDetect调整方法可见性,配合自定义命名策略实现:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;

@JsonAutoDetect(
  getterVisibility = JsonAutoDetect.Visibility.NONE,
  setterVisibility = JsonAutoDetect.Visibility.NONE,
  isGetterVisibility = JsonAutoDetect.Visibility.NONE,
  fieldVisibility = JsonAutoDetect.Visibility.NONE,
  creatorVisibility = JsonAutoDetect.Visibility.NONE,
  publicMethodVisibility = JsonAutoDetect.Visibility.ANY
)
@JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class) // 可根据实际命名规则调整
class MyModel{
  // 类内部逻辑和原代码一致,不需要为单个方法加注解
}

内容的提问来源于stack exchange,提问作者diziaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:04