J'ai besoin de transmettre une liste de valeurs dans le corps de la requête de la méthode POST
mais je reçois 400: Bad Request error
.
Voici mon exemple de code:
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody List<String> fruits) {
...
}
Le JSON que j'utilise est le suivant: {"fruits":["Apple","orange"]}
Vous utilisez un mauvais JSON. Dans ce cas, vous devez utiliser un code JSON ressemblant à ceci:
["orange", "Apple"]
Si vous devez accepter JSON sous cette forme:
{"fruits":["Apple","orange"]}
Vous devrez créer un objet wrapper:
public class FruitWrapper{
List<String> fruits;
//getter
//setter
}
et alors votre méthode de contrôleur devrait ressembler à ceci:
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody FruitWrapper fruits){
...
}
J'ai eu le même cas d'utilisation, Vous pouvez changer la définition de votre méthode de la manière suivante:
@RequestMapping(value = "/saveFruits", method = RequestMethod.POST,
consumes = "application/json")
@ResponseBody
public ResultObject saveFruits(@RequestBody Map<String,List<String>> fruits) {
..
}
Le seul problème est qu'il accepte n'importe quelle clé à la place de "fruits" mais vous pouvez facilement vous débarrasser d'un wrapper s'il ne s'agit pas d'une fonctionnalité importante.