字段驼峰转换
属性命名策略(驼峰、下划线、连字符等)有三个作用层级,优先级从高到低:属性 > 类 > 全局。
示例类:
@Getter
@Setter
public class Author {
private String username;
private String idCard;
private String mobilePhone;
}
命名策略
PropertyNamingStrategies 提供几种内置策略(旧版 PropertyNamingStrategy 已废弃,2.12+ 用 PropertyNamingStrategies):
| 策略 | idCard → |
|---|---|
SNAKE_CASE | id_card |
UPPER_CAMEL_CASE | IdCard |
LOWER_CAMEL_CASE(默认) | idCard |
LOWER_CASE | idcard |
KEBAB_CASE | id-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,按 @JsonNaming 走 UpperCamelCase;另外两个字段被 @JsonProperty 直接钉死,@JsonNaming 对它们失效。