Maison >Java >javaDidacticiel >Comment transmettre plusieurs paramètres à un contrôleur Spring MVC à l'aide de @RequestBody avec Ajax ?

Comment transmettre plusieurs paramètres à un contrôleur Spring MVC à l'aide de @RequestBody avec Ajax ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-11 12:47:021063parcourir

How to Pass Multiple Parameters to a Spring MVC Controller using @RequestBody with Ajax?

Transmission de plusieurs paramètres dans @RequestBody à un contrôleur Spring MVC à l'aide d'Ajax

Lors de la tentative de transmission de plusieurs paramètres à un contrôleur Spring MVC à l'aide de @ RequestBody, de nombreux développeurs se posent la question de savoir s'il est nécessaire d'envelopper les paramètres dans un support objet.

Approche initiale :

Au départ, vous pouvez essayer de faire ce qui suit :

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

Avec une charge utile JSON comme celle-ci :

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

Cependant, vous constaterez peut-être que cette approche ne fonctionne pas aussi bien. attendu.

Approche de l'objet Wrapper :

Pour surmonter ce problème, l'approche suivante consiste à envelopper les paramètres dans un objet de support :

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

Cela nécessite une charge utile JSON comme celle-ci :

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

Alternative Options :

Vous pouvez également modifier RequestMethod en GET et utiliser @RequestParam dans la chaîne de requête. Une autre option consiste à utiliser @PathVariable avec RequestMethod.

Utilisation d'une carte ou d'un objet ObjectNode :

Si l'emballage dans un objet de support n'est pas souhaitable, vous pouvez utiliser une carte ou ObjectNode de Jackson pour lier plusieurs paramètres dans @RequestBody :

@RequestMapping(value = "/Test", method = RequestMethod.POST)
@ResponseBody
public boolean getTest(@RequestBody Map<String, String> json) {
    //json.get("str1") == "test one"
}

Ou :

public boolean getTest(@RequestBody ObjectNode json) {
    //json.get("str1").asText() == "test one"
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn