Jackson将对象转成Map<String, String>过程中遇到的问题

本文探讨了使用Jackson将对象转换为Map<String, String>时遇到的类型检查问题。当直接使用Map.class进行转换,Jackson不会强制字段类型为String,可能导致在后续操作中出现类型转换异常。解决方案是利用TypeReference确保转换类型的一致性,以避免序列化或字段访问时抛出错误。" 89705563,7529306,使用Python实现高效状态机,"['Python编程', '状态检测', '对象设计', '程序优化']
摘要由CSDN通过智能技术生成

1  前言

    以前用Jackson序列化和反序列化时都只是简单的当工具用,在将对象转成Map形式时遇到一个转换检查的问题,于是就日常记录一下。

2  问题描述

    当前我们有两个类:类Arguments包含字段有String、Long、Integer类型;

                                    类Response包含一个Arguments的Map字段,key和value都是String类型

    然后在main函数中,我们通过Jackson的convertvalue()希望将Arguments对象转成Map<String, String>。

     但是注意到,如果不指定Map的具体类型(即只指定Map.class),Jackson其实是不会对转换的Map<String, String>做字段类型检查,也就是说转换后的argumentsMap的value仍然是和Arguments对应字段类型保持一致,而不是String类型。

     但是Response里是直接set了这个argumentsMap,这样后面对Response序列化或通过get()获取字段的value值时会报错,形如:Long can not cast to String。

3  结论

    1)如果需要避免后面字段转换异常,最好使用Jackson的TypeReference方式保证一致

@Data
public class Arguments {
    
    private String name;

    private Long id;

    private Integer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值