2017-10-16 8 views
0

Je souhaite utiliser certaines des clés d'un document JSON en tant que valeurs dans une classe et je ne souhaite pas utiliser Map.Clé Jackson JSON en tant que valeur dans la classe

J'ai obtenu un document JSON avec la forme suivante:

{ 
"GateWay": { 
    "API1": { 
    "Infos": "More", 
    "Meta": [1,2,3] 
    }, 
    "API2": { 
    "Infos": "Even more", 
    "Meta": [4,5,6] 
    }, 
    "API3": { 
    "Infos": "Nope", 
    "Meta": [] 
    } 
} 

Je veux que cette structure à désérialisée comme une classe Java comme ceci:

class GateWays { 
    List<GateWay> gateWays; 
} 

class GateWay { 
    String name; // API1, API2 or API3 for example 

    String infos; 

    List<Integer> meta; 
} 

Comment puis-je dire Jackson à prendre la clé comme valeur dans une classe au lieu d'utiliser des cartes?

+0

Je ne pense pas que je bris le contrat JSON, le JSON est tel qu'il est et je veux l'importer dans une structure POJO plus pratique sans mappage supplémentaire pour travailler avec les données importées dans mon code JAVA. –

Répondre

0

Essayez comme suit:

class Result{ 
    GateWay GateWay; 

    //getter and setter 
} 

class GateWay { 
    Api API1; // API1, API2 or API3 for example 
    //getter and setter 
} 

class Api{ 
    String Infos; 
    List<Integer> Meta; 

    //getter and setter 
} 
+0

Désolé ma question n'était pas assez claire, les clefs ne sont pas fixées et pourraient même s'appeler comme API1000 etc ... –

0

J'envisagiez ci-dessous est votre méthode POST ...

@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public Response YourPostMethod(@Context UriInfo info, GateWays gateways, @HeaderParam("your_header_porom") String yourheaderporom ......); 

Maintenant, vous devez déclarer deux classes comme ci-dessous (une classe interne est ici)

import org.codehaus.jackson.annotate.JsonIgnoreProperties; 
    import org.codehaus.jackson.map.annotate.JsonSerialize; 
    import java.io.Serializable; 

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT) 
    @JsonIgnoreProperties(ignoreUnknown=true) 
    public class GateWays { 
    List<GateWay> gateWays; 

    public List<GateWay> setGateWays(){ 
    return this.gateWays; 
    } 
    public void setGateWays(ist<GateWay> gateWays){ 
     this.gateWays = gateWays; 
    } 

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT) 
    public static class GateWay implements Serializable { 
    String Name; // API1, API2 or API3 for example *** Here you need to change your json message to inject APIs into it like "Name" : "API1" 
    String Infos; 
    List<Integer> Meta; 
    //add your setter and getter methods here like I did in the above class  
} 
} 

Espérons que cela vous aidera.

+0

Le JSON vient comme il est, donc je ne peux pas changer la structure de données. –