Dieser Artikel bietet Ihnen eine Einführung in die Methode zum Empfangen und Reagieren auf JSON-Daten (mit Code). Ich hoffe, dass er für Sie hilfreich ist.
Zusätzlich zur Übermittlung von Daten über das Formularformular können Front-End- und Back-End-Dateninteraktionen auch Daten im JSON-Format über Ajax an das Back-End senden und empfangen (diese Methode kann die Trennung von Anforderungen realisieren). Daten und Seite). In diesem Artikel werden verschiedene Möglichkeiten zum Empfangen und Antworten auf JSON-Daten in Spring MVC zusammengefasst.
Vorbereitungsschritte:
1. Importieren Sie die Abhängigkeiten von JSON-bezogenen Frameworks (z. B. Jackson).
2. Die Controller-Methode von Spring MVC wird normal geschrieben. Wenn Sie auf JSON antworten müssen, fügen Sie die Annotation @responsebody hinzu.
3. Bevor Sie die JSON-Eingabeparameter akzeptieren, fügen Sie die Annotation @RequestBody hinzu.
Der Server empfängt JSON-Daten und stellt sie in einem Java-Objekt wieder her, was als Deserialisierung bezeichnet wird. Im Gegensatz dazu wird das Konvertieren des Java-Objekts in JSON-Daten als Antwort und das Zurücksenden an den Client als Serialisierung bezeichnet.
Hinweis: Da Sie Ajax verwenden möchten, müssen Sie jQuery einführen. Denken Sie daran!
Jackson Maven-Abhängigkeit:
<!-- 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>
Hintergrund: Wenn Ajax viele Parameter übergibt, ist es nicht praktisch, die Methode zum Abgleich von Parameternamen zu verwenden. Wenn im Hintergrund eine entsprechende Entitätsklasse vorhanden ist, können Sie die Daten im JSON-Format auf dem Client kapseln und an den Hintergrund übergeben. Der Hintergrund verwendet dann die entsprechende Entitätsklasse, um sie zu empfangen.
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>
@responseBody-Annotation besteht darin, das von der Controller-Methode zurückgegebene Objekt über einen geeigneten Konverter in das angegebene Format zu konvertieren und es dann in den Textbereich der Antwort zu schreiben Objekt, normalerweise mit der Rückgabe von JSON-Daten oder XML.Die Annotation @RequestBody wird häufig verwendet, um Inhalte zu verarbeiten, deren Inhaltstyp nicht der Standardcodierung application/x-www-form-urlcoded entspricht. Im Allgemeinen wird es häufig zur Verarbeitung von Anwendungs-/JSON-Typen verwendet.
Controller:
@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; } }
Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST bookId=1, author=Jack
Client (Popup-Fenster): Erfolg :1,Jack
@RestController
verwenden. @RestController = @Controller + @ResponseBody
Controller (der obige Controller kann durch den folgenden ersetzt werden):
@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; } }
Hinweis: Nach Verwendung der @RestController
-Annotation , Controller Die Methode kann keine JSP-Seiten oder HTML mehr zurückgeben und der konfigurierte Ansichtsparser funktioniert nicht.
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>
Controller:
@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; }
Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST {bookName=Love, author=Frank}
Client (Pop -up-Fenster): 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>
Hinweis : Bei der Übergabe an das Backend sollte die Liste JSON-Formatdaten von [ { key1 : value1} { key2 : value2} ] enthalten, andernfalls kann ein Json-Analysefehler auftreten.
Controller:
@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; }
Hinweis: Zum Empfangen ist hier die Entitätsklasse „Book“ erforderlich.
Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST [entity.Book@1138a75c, entity.Book@22d1cbcf]
Client (Popup-Fenster): bookId =123; author= Rose bookId =321; Autor=Jack
Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Empfangen und Antworten von JSON-Daten durch SpringMVC (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!