Jackson ObjectMapper 使用

本文详细介绍了Jackson的ObjectMapper使用,包括配置、序列化和反序列化的方法。ObjectMapper支持多种数据类型的转换,如从byte[]、File、InputStream到JSON,以及JSON到对象的反序列化。同时,文章还探讨了如何处理反序列化泛型类,包括使用TypeReference静态和JavaType动态的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}

反序列化泛型的两种操作

  1. TypeReference 静态
  2. 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值