如何在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
相关产品推荐
相关产品推荐

