web-dev-qa-db-fra.com

Classe intérieure de cartographie de type Jackson Json

J'essaie de créer le type de classe interne pour un objet transmis en tant que JSON, mais même si j'ai lu des tonnes ici ainsi que le site de Jackson, je ne semble pas être en mesure d'obtenir la bonne combinaison, donc si quelqu'un d'autre a des pointeurs ils seraient très appréciés. J'ai posté quelques extraits ci-dessous et supprimé tous les getters et setters, je ne pensais pas qu'ils avaient besoin d'être publiés. J'utilise Jackson 2.2.

Les classes que j'essaye de désérialiser:

public class Settings {
  private int offset;
  private int limit;
  private String type;
  private Map<String, Criteria> criteria;

  public class Criteria {
    private String restriction;
    private Object value;
  }
}

Le code que j'utilise pour désérialiser:

ObjectMapper om = new ObjectMapper();
TypeFactory tf = om.getTypeFactory();
JavaType map = tf.constructMapLikeType( Map.class, String.class, Criteria.class );
JavaType type = typeFactory.constructType( Settings.class, map );
Settings settings = om.readValue( entity, type );

Mes données de test JSON:

{ "type": "org.json.Car", "criteria": { "restriction": "eq", "value": "bmw" } }
21
ars265

Si vous le pouvez, simplifiez-vous la vie et déplacez la classe interne vers une classe normale avec une référence dans la classe Settings. Et puis faites le marshalling en utilisant jackson, voici comment vous pouvez avoir vos classes:

public class Settings {
  private int offset;
  private int limit;
  private String type;
  private Map<String, Criteria> criteria;
  private Criteria criteria;
}


 class Criteria {
    private String restriction;
    private Object value;
  }
14
Juned Ahsan

La bonne réponse est que le mot-clé statique manque dans la classe interne.

Assurez-vous simplement que le mot clé "statique" est là.

Lire http://www.cowtowncoder.com/blog/archives/2010/08/entry_411.html

cela vous prend 3 minutes mais vous rend heureux pour le reste de la journée.

61
redochka