Cet article vous présente la méthode de réception et de réponse de SpringMVC aux données json (avec du code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
En plus de soumettre des données via le formulaire, l'interaction des données front-end et back-end peut également transmettre et recevoir des données au format json au back-end via ajax (cette méthode peut réaliser la séparation des requêtes données et page). Cet article résumera plusieurs façons de recevoir et de répondre aux données json dans Spring MVC.
Étapes de préparation :
1. Importez les dépendances des frameworks liés à json (tels que jackson).
2. La méthode du contrôleur de spring mvc est écrite normalement. Si vous devez répondre à json, ajoutez l'annotation @responsebody.
3. Avant d'accepter les paramètres d'entrée correspondant à json, ajoutez l'annotation @RequestBody.
Le serveur reçoit les données json et les restaure dans un objet java, ce qu'on appelle la désérialisation. Au contraire, convertir l'objet java en données json en réponse et le renvoyer au client est appelé sérialisation.
Remarque : Parce que vous souhaitez utiliser ajax, vous devez introduire jQuery, rappelez-vous !
Dépendance Jackson Maven :
<!-- jackson依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.0</version> </dependency>
Contexte : Lorsque ajax transmet de nombreux paramètres, il n'est pas pratique d'utiliser la méthode de correspondance des noms de paramètres. S'il existe une classe d'entité correspondante en arrière-plan, vous pouvez choisir d'encapsuler les données au format json sur le client et de les transmettre à l'arrière-plan, et l'arrière-plan utilisera la classe d'entité correspondante pour les recevoir.
Client :
<button onclick="clickMe()">点我</button> <script> function clickMe() { $.ajax({ type : 'POST', url : "acceptJsonByEntity", contentType : "application/json;charset=utf-8", // 如果想以json格式把数据提交到后台的话,JSON.stringify()必须有,否则只会当做表单提交 data : JSON.stringify({ "bookId" : 1, "author" : "Jack" }), // 期待返回的数据类型 dataType : "json", success : function(data) { var bookId = data.bookId; var author = data.author; alert("success:" + bookId+','+author); }, error : function(data) { alert("error" + data); } }); </script>
L'annotation @responseBody convertit l'objet renvoyé par la méthode du contrôleur dans le format spécifié via un convertisseur approprié, puis l'écrit dans la zone du corps de la réponse objet Généralement utilisé pour renvoyer des données JSON ou XML.L'annotation @RequestBody est souvent utilisée pour gérer du contenu dont le type de contenu n'est pas l'encodage application/x-www-form-urlcoded par défaut. De manière générale, il est couramment utilisé pour gérer les types application/json.
Contrôleur :
@Controller public class PassJsonParam { @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST) @ResponseBody public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){ System.out.println("当前http请求方式为:"+request.getMethod()); System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor()); return book; } }
Sortie de la console : La méthode de requête http actuelle est : POST bookId=1, author=Jack
Client (fenêtre contextuelle ) :success:1,Jack
@RestController
. @RestController = @Controller + @ResponseBody
Contrôleur (le contrôleur ci-dessus peut être remplacé par le suivant) :
@RestController public class PassJsonParam { @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST) public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){ System.out.println("当前http请求方式为:"+request.getMethod()); System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor()); return book; } }
Remarque : après avoir utilisé le @RestController
annotation , la méthode du Controller ne peut plus renvoyer de pages jsp ou HTML, et l'analyseur de vue configuré ne fonctionnera pas.
Client :
<form id="bookForm"> <input type="text" name="bookName" id="bookName"> <input type="text" name="author" id="author" > <button onclick="submitForm(event)">提交</button> </form> <script> function submitForm(event) { //阻止form默认事件 event.preventDefault(); //得到搜索框数据 var map = new Map(); $("#bookForm input").each(function () { var value = $(this).val(); //input 值 var name = $(this).attr('name'); map.set(name,value); }) //Map转为Json的方法 var obj= Object.create(null); for (var [k,v] of map) { obj[k] = v; } $.ajax({ type: 'POST', contentType:'application/json', url: "acceptJsonByMap", data: JSON.stringify(obj), dataType: 'json', success: function (data) { var bookName = data.bookName; var author = data.author; alert("bookName ="+bookName+"; author="+author); }, error: function (data) { alert("失败啦"); } }); } </script>
Contrôleur :
@RequestMapping(value="acceptJsonByMap") @ResponseBody public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){ System.out.println("当前http请求方式为:"+request.getMethod()); System.out.println(paramsMap); return paramsMap; }
Sortie de la console : La méthode de requête http actuelle est : POST {bookName=Love, author=Frank}
Client (fenêtre pop-up) : bookName =Love; author=Frank
Client :
<button onclick="clickHere()">clickHere</button> <script> function clickHere() { var params1 = { "bookId":"123", "author":"Rose" }; var params2 = { "bookId":"321", "author":"Jack" }; var list = []; list.push(params1); list.push(params2); $.ajax({ type: 'POST', contentType:'application/json', url: "acceptJsonByList", data: JSON.stringify(list), dataType: 'json', success: function (data) { for (let i = 0; i < data.length; i++) { var bookId = data[i].bookId; var author = data[i].author; alert("bookId ="+bookId+"; author="+author); } }, error: function (data) { alert("失败啦"); } }); } </script>
Remarque : lorsqu'elle est transmise au backend, la liste doit être constituée de données au format json de [ { key1 : value1} { key2 : value2} ], sinon une erreur d'analyse Json peut se produire.
Contrôleur :
@RequestMapping(value="acceptJsonByList") @ResponseBody public List<Book> acceptJsonByList(@RequestBody List<Book> book, HttpServletRequest request){ System.out.println("当前http请求方式为:"+request.getMethod()); System.out.println(book); return book; }
Remarque : La classe d'entité Book est requise ici pour recevoir.
Sortie de la console : la méthode de requête http actuelle est : POST [entity.Book@1138a75c,entity.Book@22d1cbcf]
Client (fenêtre contextuelle) : bookId =123 ; Rose bookId =321; auteur=Jack
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!