我有以下java对象:
Record.class
{
long version;
String data;
String source;
}
我正在尝试使用该data字段并使用对象映射器将其转换为 Java 类。
data = "{
\"myUuid\": \"af34b6ab-bebc-443b-af5c-53495905cb0b\",
\"location\": \"UK\",
\"clientName\": \"My_ClientName\",
\"status\": \"SUCCESS\",
\"activeDays\": 251
}";
我对应的Java类:
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ClientInfo implements TargetEntity {
@JsonAlias("clientName")
@JsonProperty("clientAccountId")
String clientName;
@JsonAlias("location")
@JsonProperty("geo")
String geo;
@JsonAlias("status")
@JsonProperty("clientStatus")
String status;
@JsonAlias("activeDays")
@JsonProperty("numberOfDaysActive")
int activeDays;
@Override
public String getEntityName() {
return "ClientInfo";
}
@Override public boolean isActiveForAtleast1Day() {
return activeDays>0;
}
}
最后我使用的代码:
protected void buildClientInfo(Record clientRecord) {
String data = crmRecord.getData();
ObjectMapper objectMapper = new ObjectMapper();
ClientInfo entityData = objectMapper.readValue(data, ClientInfo.class);
}
我的输出始终是 ObjectMapper 无法读取其他值。
{
"activeDays" : 0
}
使用 jackson-databind-2.9.x
我错过了什么?奇怪的是 - 如果我这样做了,new Gson().fromJson(clientRecord.getData(), clazz)我会得到我需要的输出,除了isActiveForAtleast1Day.