it-roy-ru.com

Jackson ObjectMapper не может десериализовать POJO, выдает исключение: не найден подходящий конструктор для типа [...]: невозможно создать экземпляр из объекта JSON

Я попытался проверить следующий код безуспешно:

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\": \"[email protected]\", \"name\": \"test1\"}";
    ObjectMapper mapper = new ObjectMapper();

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

    String castedback=mapper.defaultPrettyPrintingWriter().writeValueAsString(casted);
    System.out.println(castedback);
  } 
}

Эта проблема отличается от этой: Десериализация JSON с Джексоном - Почему JsonMappingException «Нет подходящего конструктора»?

и этот: JsonMappingException: не найден подходящий конструктор для типа [простой тип, класс]: невозможно создать экземпляр объекта JSON

и этот: JsonMappingException: не найден подходящий конструктор для типа [простой тип, класс]: невозможно создать экземпляр объекта JSON

как я вручную переопределить конструктор по умолчанию, и это не подкласс.

Как мне исправить эту проблему?

23
tribbloid

Сделай это статичным. Джексон не может десериализовать до внутренних классов

59
eugen

Возможно, проблема в том, что Джексон не может должным образом добраться до вашего класса ND2Customer, чтобы вызвать его конструктор, потому что он private, так как ваш класс в противном случае выглядит просто отлично. Попробуйте сделать это public и посмотреть, работает ли это.

0
Donal Fellows