web-dev-qa-db-fra.com

Jackson ObjectMapper ne peut pas désérialiser POJO, lève une exception: aucun constructeur approprié trouvé pour le type [...]: ne peut pas instancier à partir d'un objet JSON

J'ai essayé de tester le code suivant sans succès:

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);
  } 
}

Ce problème est différent de celui-ci: Désérialiser JSON avec Jackson - Pourquoi JsonMappingException "Aucun constructeur approprié"?

et celui-ci: JsonMappingException: aucun constructeur approprié trouvé pour le type [type simple, classe]: impossible d'instancier à partir d'un objet JSON

et celui-ci: JsonMappingException: aucun constructeur approprié trouvé pour le type [type simple, classe]: impossible d'instancier à partir d'un objet JSON

comme j'ai manuellement remplacer le constructeur par défaut, et ce n'est pas une sous-classe.

Comment puis-je résoudre ce problème?

23
tribbloid

Faites-le statique. Jackson ne peut pas se désérialiser en classes intérieures

59
eugen

Le problème est probablement que Jackson ne peut pas atteindre correctement votre classe ND2Customer pour invoquer son constructeur car il s'agit de private, car votre classe a par ailleurs une apparence parfaite. Essayez de le rendre public et de voir si cela fonctionne.

0
Donal Fellows