2017-09-13 1 views
0

Je veux fournir un servlet POST qui prend le contenu JSON suivant:Comment ajouter tous les paramètres @PostMapping à une carte?

{ 
    "name": John 
    "age": 25, 
    "some": "more", 
    "params: "should", 
    "get": "mapped" 
} 

Deux de ces propriétés doivent être explicitement mis en correspondance avec les paramètres définis. Tous les autres paramètres doivent entrer dans un Map<String, String>. Question: comment puis-je laisser Spring les mapper directement dans la carte du haricot?

@RestController 
public void MyServlet { 
    @PostMapping 
    public void post(@RequestBody PostBean bean) { 

    } 
} 

public class PostBean { 
    private String name; 
    private String age; 

    //all other json properties should go here 
    private Map<String, String> map; 
} 
+0

Avez-vous envisagé ceci: https://stackoverflow.com/questions/39916520/mapping-a-dynamic-json-object-field-in-jackson? – Andremoniy

+0

Cela nécessiterait un paramètre "payload" supplémentaire dans le json. Mais je ne peux pas changer le JSON qui est posté. – membersound

+2

Cet article contient un lien utile dans les commentaires: http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html – Andremoniy

Répondre

0
public class PostBean { 
    private Map<String, String> map; 

    @JsonAnyGetter 
    public Map<String, String> getMap() { 
     return map; 
    } 

    @JsonAnySetter 
    public void setMap(String name, String value) { 
     if (this.map == null) map = new HashMap<>(); 
     this.map.put(name, value); 
    } 
} 
+0

Lorsque vous postez des réponses, il est important que vous postez plus que du code, assurez-vous d'expliquer vos réponses – MayorMonty

+0

Eh bien, la question est de savoir comment ajouter tous les paramètres à la «carte». La réponse est simple et le code fournit un exemple complet. La différence nette entre la question et la réponse est le '@ JsonAnyGetter/Setter'. Donc pas besoin d'écrire d'autres explications. – membersound