ObjectMapper
ObjectMapper 配置
一般直接 new 使用 SerializationFeature 类默认配置,配置有 Feature MapperFeature SerializationFeature
//Feature 代表配置 state代表状态
public ObjectMapper configure(Feature f, boolean state)
//启用
public ObjectMapper enable(Feature f)
//禁用
public ObjectMapper disable(Feature f)
//如
// 排除json字符串中实体类没有的字段
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
ObjectMapper 序列化
序列化字符串 byte数组 File OutputStream等
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(obj);
ObjectMapper 反序列化
ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化
利用 readTree 获取 JsonNode
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json);
Long userId = rootNode.get("userId").asLong();
Integer typeCode = rootNode.get("typeCode").asInt();
Double count = rootNode.get("count").asDouble();
String destId = rootNode.get("destId").asText();
JsonNode 应用组合模式,树形结构
利用 readValue 获取对象类型
ObjectMapper mapper = new ObjectMapper();
UserGift userGift = mapper .readValue(json, UserGift.class);
反序列化列表
//第一种方法
List<User> list = mapper.readValue(json, new TypeReference<List<User>>(){/**/});
//第二种方法
JavaType javaType = mapper.getTypeFactory().constructCollectionType(List.class, User.class);
List<User> list2 = mapper.readValue(json, javaType);
反序列化泛型类
实例类
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ToString
public class BdResp<T> implements Serializable {
private Boolean success;
private String logId;
private T result;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ToString
public class BdFaceDetailVo {
private OcrResult idcardOcrResult;
private Confirm idcardConfirm;
private Images idcardImages;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public static class OcrResult {
private String birthday;
private String issueAuthority;
private String address;
private String gender;
private String nation;
private String expireTime;
private String name;
private String issueTime;
private String idCardNumber;
}
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public static class Confirm {
private String idcardNumber;
private String name;
}
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public static class Images {
private String frontBase64;
private String backBase64;
}
}
反序列化泛型的两种操作
- TypeReference 静态
- JavaType 动态
TypeReference 使用匿名内部类
ObjectMapper mapper = new ObjectMapper();
String s = "";
mapper.readValue(s, new TypeReference<BdResp<BdFaceDetailVo>>(){});
JavaType
ObjectMapper mapper = new ObjectMapper();
String s = "";
JavaType javaType = mapper.getTypeFactory().constructParametricType(BdResp.class, BdFaceDetailVo.class);
BdResp<BdFaceDetailVo> o = mapper.readValue(s, javaType);