152 votes

Passage de plusieurs variables dans @RequestBody à un contrôleur Spring MVC en utilisant Ajax

Est-il nécessaire d'envelopper dans un objet de soutien ? Je veux faire ceci :

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody String str1, @RequestBody String str2) {}

Et utiliser un JSON comme ceci :

{
    "str1": "test one",
    "str2": "two test"
}

Mais à la place, je dois utiliser :

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody Holder holder) {}

Et ensuite utiliser ce JSON :

{
    "holder": {
        "str1": "test one",
        "str2": "two test"
    }
}

Est-ce exact ? L'autre option serait de modifier le RequestMethod a GET et utiliser @RequestParam dans la chaîne de requête ou utiliser @PathVariable avec soit RequestMethod .

1voto

cambunctious Points 1475

Utiliser une classe interne

@RestController
public class MyController {

    @PutMapping("/do-thing")
    public void updateFindings(@RequestBody Bodies.DoThing body) {
        ...
    }

    private static class Bodies {
        public static class DoThing {
            public String name;
            public List<String> listOfThings;
        }
    }
}

0voto

Kaleem Points 11

Le paramètre de requête existe à la fois pour GET et POST. Pour Get, il sera ajouté à l'URL comme chaîne de requête, mais pour POST, il se trouve dans le corps de la requête.

0voto

Matias Zamorano Points 13

Bien. Je vous suggère de créer un Value Object (Vo) qui contient les champs dont vous avez besoin. Le code est plus simple, on ne change pas le fonctionnement de Jackson et c'est encore plus facile à comprendre. Salutations !

0voto

Maurice Points 890

Vous pouvez obtenir ce que vous voulez en utilisant @RequestParam . Pour cela, vous devez procéder comme suit :

  1. Déclarez les paramètres RequestParams qui représentent vos objets et définissez le paramètre required à false si vous voulez être en mesure d'envoyer une valeur nulle.
  2. Sur le frontend, stringifiez les objets que vous voulez envoyer et incluez-les comme paramètres de requête.
  3. En arrière-plan, transformez les chaînes JSON en objets qu'elles représentent en utilisant Jackson ObjectMapper ou quelque chose comme ça, et voilà !

Je sais, c'est un peu un hack mais ça marche ;)

0voto

Brook Points 49

Vous pouvez également utiliser @RequestBody Map<String, String> params ,puis utiliser params.get("key") pour obtenir la valeur du paramètre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X