SpringBoot處理JSON數據方法詳解
前言
在Spring Boot的Web應用中 內置瞭JSON數據的解析功能,默認使用Jackson自動完成解析(不需要解析加載Jackson依賴包)當控制器返回一個Java對象或集合數據時 Spring Boot自動將其轉換成JSON數據,使用起來很方便簡潔。
Spring Boot處理JSON數據時,需要用到兩個重要的JSON格式轉換註解,分別是@RquestBody
@ResponseBody 他們的作用分別如下
@RequestBody:用於將請求體中的數據綁定到方法的形參中,該註解應用在方法的形參上
@ResponseBody:用於直接返回JSON對象 該註解應用在方法上
下面通過一個實例講解Spring Boot處理JSON數據的過程,該實例針對返回實體對象,ArrayList集合,Map<String,Object>集合以及List<Map<String,Object>>集合分別處理
步驟如下
1、創建實體類
在應用的com.ch.ch5_2.model包中 創建實體類Preson 代碼如下
package com.ch.ch5_2.model; public class Preson { private String pname; private String password; private Integer page; public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getPage() { return page; } public void setPage(Integer page) { this.page = page; } }
2、創建視圖頁面
在src/main/resources/templates目錄下 創建視圖頁面 input.html 並且引入jQuery框架 並使用它的ajax方法進行異步請求 部分代碼如下(此處需要一些Java Web開發的知識 如有不明白的可以參考我之前的博客 進主頁就有)
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" th:href="@{css/bootstrap.min.css}" rel="external nofollow" /> <!-- 默認訪問 src/main/resources/static下的css文件夾--> <link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" rel="external nofollow" /> <!-- 引入jQuery --> <script type="text/javascript" th:src="@{js/jquery.min.js}"></script> <script type="text/javascript"> function testJson() { //獲取輸入的值pname為id var pname = $("#pname").val(); var password = $("#password").val(); var page = $("#page").val(); alert(password); $.ajax({ //發送請求的URL字符串 url : "testJson", //定義回調響應的數據格式為JSON字符串,該屬性可以省略 dataType : "json", //請求類型 type : "post", //定義發送請求的數據格式為JSON字符串 contentType : "application/json", //data表示發送的數據 data : JSON.stringify({pname:pname,password:password,page:page}), //成功響應的結果 success : function(data){ if(data != null){ //返回一個Person對象 //alert("輸入的用戶名:" + data.pname + ",密碼:" + data.password + ",年齡:" + data.page); //ArrayList<Person>對象 /**for(var i = 0; i < data.length; i++){ alert(data[i].pname); }**/ //返回一個Map<String, Object>對象 //alert(data.pname);//pname為key //返回一個List<Map<String, Object>>對象 for(var i = 0; i < data.length; i++){ alert(data[i].pname); } } }, //請求出錯 error:function(){ alert("數據發送失敗"); } }); } </script> </head> hicon-pencil"></i> </span> <input class="form-control" type="text" id="pname" th:placeholder="請輸入用戶名"/> </div> </div> <div class="form-group"> <div class="input-group col-md-6"> <span class="input-group-addon"> <i class="glyphicon glyphicon-pencil"></i> </span> <input class="form-control" type="text" id="password" th:placeholder="請輸入密碼"/> </div> </div> <div class="form-group"> <div class="input-group col-md-6"> <span class="input-group-addon"> <i class="glyphicon glyphicon-pencil"></i> </span> <input class="form-control" type="text" id="page" th:placeholder="請輸入年齡"/> </div> </div> <div class="form-group"> <div class="col-md-6"> <div class="btn-group btn-group-justified"> <div class="btn-group"> <button type="button" onclick="testJson()" class="btn btn-success"> <span class="glyphicon glyphicon-share"></span> 測試 </button> </div> </div> </div> </div> </form> </div> </div> </div> </body> </html>
3、創建控制器
在ch5_2應用的com.ch.ch5_2.controller包中 創建控制器類TestJsonController 在該類中有兩個處理方法,一個時界面導航方法,一個是接受頁面請求的方法 部分代碼如下
package com.test.ch3_2.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ch5_2.model.Preson; @Controller public class TestJsonController { /** * 進入視圖頁面 */ @RequestMapping("/input") public String input() { return "input"; } /** * 接收頁面請求的JSON數據 */ @RequestMapping("/testJson") @ResponseBody /*@RestController註解相當於@ResponseBody + @Controller合在一起的作用。 1) 如果隻是使用@RestController註解Controller,則Controller中的方法無法返回jsp頁面或者html, 返回的內容就是Return的內容。 2) 如果需要返回到指定頁面,則需要用 @Controller註解。如果需要返回JSON,XML或自定義mediaType內容到頁面, 則需要在對應的方法上加上@ResponseBody註解。 */ public List<Map<String, Object>> testJson(@RequestBody Preson user) { //打印接收的JSON格式數據 System.out.println("pname=" + user.getPname() + ", password=" + user.getPassword() + ",page=" + user.getPage()); //返回Person對象 Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("pname", "陳恒3"); map1.put("password", "54321"); map1.put("page", 55); allp.add(map1); return allp; } }
然後運行Ch52Application主類 然後訪問http://localhost:8080/ch5_2/input
運行效果如下
到此這篇關於SpringBoot處理JSON數據方法詳解的文章就介紹到這瞭,更多相關SpringBoot JSON數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 基於controller使用map接收參數的註意事項
- C# newtonsoft.json中文亂碼問號的解決方案
- 基於@RequestBody和@ResponseBody及Stringify()的作用說明
- SpringMVC HttpMessageConverter報文信息轉換器
- AJAX SpringBoot 前後端數據交互的項目實現