跳到主要内容

字段驼峰转换

属性命名策略(驼峰、下划线、连字符等)有三个作用层级,优先级从高到低:属性 > 类 > 全局

示例类:

@Getter
@Setter
public class Author {
private String username;
private String idCard;
private String mobilePhone;
}

命名策略

PropertyNamingStrategies 提供几种内置策略(旧版 PropertyNamingStrategy 已废弃,2.12+ 用 PropertyNamingStrategies):

策略idCard
SNAKE_CASEid_card
UPPER_CAMEL_CASEIdCard
LOWER_CAMEL_CASE(默认)idCard
LOWER_CASEidcard
KEBAB_CASEid-card

全局配置

作用于整个 ObjectMapper

ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
System.out.println(mapper.writeValueAsString(author));
// {"username":"张三","id_card":"...","mobile_phone":"..."}

类级配置

类上用 @JsonNaming,优先级高于全局,会盖过 mapper.setPropertyNamingStrategy(...)

@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class Author { ... }

属性级配置

字段上用 @JsonProperty 直接指定序列化名,优先级最高:

@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class Author {
private String username; // 走 @JsonNaming → Username

@JsonProperty("id_card")
private String idCard; // @JsonProperty → id_card

@JsonProperty("mobile-phone")
private String mobilePhone; // @JsonProperty → mobile-phone
}
{"Username":"张三","id_card":"...","mobile-phone":"..."}

username 没有 @JsonProperty,按 @JsonNamingUpperCamelCase;另外两个字段被 @JsonProperty 直接钉死,@JsonNaming 对它们失效。