使用JackSon将Object(LinkHashMap)转成POJO

当接口返回的JSON包含嵌套实体类时,Jackson的readValue()方法会将内部实体转成LinkHashMap导致报错。解决方法是将实体类属性设置为Object类型,避免直接转换,然后在需要时利用Jackson将Object重新转换回目标实体类。

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


    接口返回了一个自己封装实体类,将实体类转化成JSON传给了客户端。客户端用JackSon将其重新转化实体类。而这个实体类中有一个属性是另外一个实体类。

    比如:


public class User(){
    private Integer Id;
    private String UserName;
    private String PassWord;

    .......
    .......
    (get,set)
}


public class myObj{
  private String A;
  private User  B;
  
  ......
  ......
  (get,set)

}

string json = XXXX; //这是接口给我们返回的
myObj data = objectMapper.readValue(json, myObj.class);


    这个时候,JackSon的readvalue()方法并不会将这个属性(User)转成POJO,而且会报错。

    这是因为,关于User对象的Json字符串会被JackSon转成LinkHashMap类型,而myObj没有LinkHashMap这个类型的属性,所以自然会报错了。

    怎么解决,我有一个容易想到的解决方法;把myObj类的User属性换成Object属性,这样就不会报错了。
     

public class myObj{
  private String A;
  private Object  B;
  
  ......
  ......
  (get,set)

}


    然后,如果想使用B的时候将Object再转换成User。 当然,没有强转的方法。可以使用jackson来转:

User user= objectMapper.convertValue(data.getB(),User.class);
这样就OK了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值