Question

Je le JSON suivant:

{ 
    fields : {
            "foo" : "foovalue",
            "bar" : "barvalue"
    }
}

J'ai écrit un POJO comme suit:

public class MyPojo {

    @JsonProperty("fields") 
    private List<Field> fields;

    static class Field {
        @JsonProperty("foo") private String foo;
        @JsonProperty("bar") private String bar;

        //Getters and setters for those 2
}

Cela échoue évidemment, parce que mon champ JSON « champs » est un hashmap, et non une liste.
Ma question est: est-il une annotation « magique » qui peut faire Jackson reconnaître les clés de carte comme les noms de propriétés de POJO, et affecter les valeurs de carte aux valeurs de propriété POJO

P.S .: Je ne veux pas avoir mes champs objet comme ...

private Map<String, String> fields;

... parce que dans mon JSON monde réel que j'ai des objets complexes dans les valeurs de carte, pas seulement des chaînes ...

Merci; -)

Philippe

Était-ce utile?

La solution

Ok, pour cette JSON, vous simplement modifier votre exemple un peu, comme:

public class MyPojo {
  public Fields fields;
}

public class Fields {
  public String foo;
  public String bar;
}

depuis la structure des besoins des objets à aligner avec la structure de JSON. Vous pouvez utiliser setters et getters au lieu des champs publics bien sûr (et les constructeurs, même au lieu de setters ou des champs), ce n'est l'exemple le plus simple.

Votre classe d'origine produirait / JSON consommer plus comme:

{ 
  "fields" : [
    {
      "foo" : "foovalue",
      "bar" : "barvalue"
    }
  ]
}

parce que les listes carte à des tableaux JSON.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top