Jackson ObjectMapper无法反序列化POJO,抛出异常:没有为类型[...]找到合适的构造函数:无法从JSON对象实例化

tri*_*oid 23 java spring json jackson

我试图测试以下代码但没有成功:

class TestClass
{
  private class ND2Customer
  {
    public String name;
    public String description;
    public String email;
    public Boolean multiuser;

    public String dnszone;
    public String uri;
    public String type;

    public ND2Customer()
    {

    }
  }

  @Test
  public void TestJackson() throws JsonParseException, JsonMappingException, IOException
  {
    String json="{\"description\": \"test1u\", \"dnszone\": \"test1.public.sevenltest.example.com.\", \"uri\": \"http://199.127.129.69/customer/test1\", \"multiuser\": true, \"type\": \"2.0.3-3146\", \"email\": \"test1@com.com\", \"name\": \"test1\"}";
    ObjectMapper mapper = new ObjectMapper();

    ND2Customer casted=mapper.readValue(json, ND2Customer.class);

    String castedback=mapper.defaultPrettyPrintingWriter().writeValueAsString(casted);
    System.out.println(castedback);
  } 
}
Run Code Online (Sandbox Code Playgroud)

这个问题与此不同: 用Jackson反序列化JSON - 为什么JsonMappingException"没有合适的构造函数"?

这一个: JsonMappingException:找不到类型[simple type,class]的合适构造函数:无法从JSON对象实例化

这一个: JsonMappingException:找不到类型[simple type,class]的合适构造函数:无法从JSON对象实例化

因为我手动覆盖默认构造函数,而不是子类.

我该如何解决这个问题?

eug*_*gen 58

让它静止.杰克逊无法反序列化到内部阶级

  • 次要添加:Jackson实际上可以反序列化一种非静态内部类 - 那些由父类直接引用的内部类.但是这不是这种情况,因为Test类没有被序列化.在这种情况下,非静态可能是偶然的. (3认同)
  • 谢谢,它的工作原理.你的解决方案完全有道理,因为杰克逊映射器无法初始化内部类并返回它. (2认同)
  • 我敢打赌嵌套POJO的大多数"没有合适的构造函数"问题是因为忘记将其标记为静态.谢谢eugen! (2认同)