2 回答
TA贡献1951条经验 获得超3个赞
答案通常是:注意您编写的代码。
getter 和 setter 将字段公开为 m*(其中 * 是实际的字段名称)。
看这个:
getmEmployeeId( ^ |
这是字母“m”。
因此,这会将字段名称公开为“mEmployeeId”
更多细节:
方法返回的值与 getter 暴露的值的名称无关。Java 要求 getter 名称的格式为“getFieldName”,而 setter 名称的格式为“setFieldName”,其中“FieldName”是任何不是方法名称“get”或“set”部分的值。
这称为“JavaBean 命名约定”,如果您使用 Java 编码并使用任何第三方 Java 库,您绝对必须理解并遵守它。
TA贡献1863条经验 获得超2个赞
要将JSON键与POJO属性匹配,请Jackson使用名为PropertyNamingStrategy. 在你的JSON我们可以找到至少两种策略:
SNAKE_CASE ( page_size, error_message, 等)
UPPER_CAMEL_CASE ( EmployeeId, DepartmentId, 等)
From other sidePOJO类提供第三种策略:
"m" + UPPER_CAMEL_CASE ( mEmployeeId, mDepartmentId, 等)
这就是为什么JSON不匹配POJO。要使其发挥作用,您需要实施如下所示的新策略:
class MNamingStrategy extends PropertyNamingStrategy {
@Override
public String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method,
String defaultName) {
return defaultName.substring(1); // remove first `m` letter
}
}
你可以这样使用它:
@JsonNaming(MNamingStrategy.class)
class Clazz {
private int Id = 11;
public int getmId() {
return Id;
}
public void setmId(int id) {
this.Id = id;
}
@Override
public String toString() {
return "Clazz{" +
"Id=" + Id +
'}';
}
}
从现在开始,您可以将上面JSON的反序列化为 given POJO。
当您添加@JsonProperty带有属性名称的注释时,您已告知Jackson使用自定义映射。
添加回答
举报
