web-dev-qa-db-fra.com

Comment passer List <String> en méthode post à l'aide de Spring MVC?

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"]}

14
user2359634

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){
...
}
36
wcislo

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.

0
Mitesh Ukate