Jackson 常见问题及解决方法

3 篇文章 0 订阅

本文翻译自:https://www.baeldung.com/jackson-exception


1,“JsonMappingException: Can not construct instance of”

造成这种异常的原因是 Jackson 无法创建抽象类接口的实例。

如下面的例子所示:

public class Zoo {
    public Animal animal;
     
    public Zoo() { }
}
 
abstract class Animal {
    public String name;
     
    public Animal() { }
}
 
class Cat extends Animal {
    public int lives;
     
    public Cat() { }
}

Zoo 类中含有1个 抽象类 Animal
当我们将1个 JSON 字符串反序列化成 Zoo 实例的时候,就会抛出JsonMappingException: Can not construct instance of异常:

@Test(expected = JsonMappingException.class)
public void givenAbstractClass_whenDeserializing_thenException() 
  throws IOException {
    String json = "{"animal":{"name":"lacy"}}";
    ObjectMapper mapper = new ObjectMapper();
 
    mapper.reader().forType(Zoo.class).readValue(json);
}

异常内容为:

com.fasterxml.jackson.databind.JsonMappingException: 
Can not construct instance of org.baeldung.jackson.exception.Animal,
  problem: abstract types either need to be mapped to concrete types, 
  have custom deserializer, 
  or be instantiated with additional type information
  at 
[Source: {"animal":{"name":"lacy"}}; line: 1, column: 2] 
(through reference chain: org.baeldung.jackson.exception.Zoo["animal"])
    at c.f.j.d.JsonMappingException.from(JsonMappingException.java:148)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值