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>
										&nbsp;測試
									</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!

推薦閱讀: