我有一个实体对象,其中Id字段的类型是整数。但是,要映射的传入Json数据将id作为字符串。
由于这个问题,直接进行映射似乎不太容易。是否有一种方法可以在映射之前将JSON中的字符串数据更改为整数?
示例Json数据:
{"Id": "021", "userAge": 99}
示例实体
@Entity
public class User{
@id
int userId;
int userAge;
}
很多感谢。
不需要。
Jackson 足够智能,如果目标字段是数字类型,就可以将 JSON 字符串转换为数字值。
不清楚前导的 0
代表什么,但 Jackson 将简单地忽略它。
此外,如果你在 Java 中的字段名与 JSON 名称不同,你需要使用 @JsonProperty("theJsonName")
注解。
public class Jackson {
public static void main(String[] args) throws Exception {
String json = "{\"userId\": \"021\", \"userAge\": 99}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user.userId);
}
}
class User {
int userId;
int userAge;
public void setUserId(int userId) {
this.userId = userId;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
}
21
public class ItemDeserializer extends JsonDeserializer<Item> {
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int id = Integer.parseInt(node.get("userId").asText());
int userAge = (Integer) ((IntNode) node.get("userAge")).numberValue();
return new Item(id, userAge);
}
}