it-swarm.com.de

Wie kann die Liste <String> in der Post-Methode mit Spring MVC übergeben werden?

Ich muss eine Liste von Werten im Anforderungstext der POST-Methode übergeben, aber ich erhalte 400: Bad Request error.

Unten ist mein Beispielcode:

@RequestMapping(value = "/saveFruits", method = RequestMethod.POST, 
    consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody List<String> fruits) {
    ...
}

Die JSON, die ich verwende, ist: {"fruits":["Apple","orange"]}

14
user2359634

Sie verwenden falsche JSON. In diesem Fall sollten Sie JSON verwenden, das folgendermaßen aussieht:

["orange", "Apple"]

Wenn Sie JSON in dieser Form akzeptieren müssen: 

{"fruits":["Apple","orange"]}

Sie müssen ein Wrapper-Objekt erstellen:

public class FruitWrapper{

    List<String> fruits;

    //getter
    //setter
}

und dann sollte Ihre Controller-Methode so aussehen:

@RequestMapping(value = "/saveFruits", method = RequestMethod.POST, 
    consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody FruitWrapper fruits){
...
}
36
wcislo

Ich hatte den gleichen Anwendungsfall Sie können Ihre Methodendefinition folgendermaßen ändern:

@RequestMapping(value = "/saveFruits", method = RequestMethod.POST, 
    consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody Map<String,List<String>> fruits) {
    ..
}

Das einzige Problem ist, dass es anstelle von "Früchten" jeden Schlüssel akzeptiert, aber Sie können einen Wrapper leicht loswerden, wenn es keine große Funktionalität gibt.

0
Mitesh Ukate

Sie können die Eingabe als ["Apple","orange"] Übergeben, wenn Sie die Methode unverändert lassen möchten.

Bei mir hat es mit einer ähnlichen Methodensignatur geklappt.

0