Spring MVC數據傳遞
- 一、前端到后端的數據傳遞
- 1. 使用 @RequestParam 傳遞簡單參數
- 2. 使用 @PathVariable傳遞路徑參數
- 3. 使用@RequestBody傳遞 JSON 數據
- 二、后端到前端的數據傳遞
- 1. 使用Model或 ModelAndView傳遞數據到前端
- 2. 使用HttpServletResponse直接寫回數據
- 3.使用@ResponseBody將后端數據用JSON格式發送前端
- 注意事項
一、前端到后端的數據傳遞
1. 使用 @RequestParam 傳遞簡單參數
應用于處理頁面標簽名稱和方法參數名稱不一致,可以使用此注解實現對應關系
適用于獲取 URL 或表單中的簡單參數(如 ?name=value
)。
后端代碼示例:
//將帶來的數據msg作為參數傳入方法,并在方法中使用@RequestMapping("/show1")public String show1(@RequestParam("msg") String msg1){System.out.println("=====接受到用戶發送數據為:"+msg1+"=======");return "success";//跳轉至成功頁面}
前端調用方式:
- URL 直接傳遞:
/show1?msg=25
- 表單提交時拼接參數。
@RequestParam的defaultValue 屬性:設置默認值
//接收到uname的值則傳遞 未接收到值返回默認值“暫無用戶”@RequestMapping("/show2")public String show2(@RequestParam(name = "uname",defaultValue = "暫無用戶") String name){System.out.println("=====接受到用戶發送數據為:"+name+"=======");return "success";//跳轉至成功頁面}
前端調用方式:
- URL 直接傳遞:
/show2?uname=xxy
- 如果直接訪問
/show2
則返回 “暫無用戶”
2. 使用 @PathVariable傳遞路徑參數
用于綁定 url 中的占位符。
從 URL 路徑中獲取動態參數(RESTful 風格)。
后端代碼示例:
//命名不一致時要在注解內帶名稱值@RequestMapping("/show3/{uname}/{pwd}")public String show3(@PathVariable("uname") String msg1, @PathVariable("pwd") String msg2){System.out.println("=====接受到用戶發送數據為:"+msg1+" "+msg2+"=======");return "success";//跳轉至成功頁面}
前端調用方式:
- 直接訪問:
/show3/xxy/1234567
//命名一致時@PathVariable內不用帶名稱值@PostMapping("/show4/{uname}/{pwd}")public String show4(@PathVariable String uname, @PathVariable String pwd){System.out.println(uname);System.out.println(pwd);return "success";}
前端調用方式:
- 直接訪問:
/show4/xxy/1234567
3. 使用@RequestBody傳遞 JSON 數據
JSON=====>Java對象
接收前端傳遞的 JSON 格式數據,并自動轉換為 Java 對象。
后端代碼示例:
//@RequestBody傳入一個對象信息(在body中用json傳遞)// {"eid":123,// "ename":"xxy",// "esex":"女"}@RequestMapping("/show5")public String show5(@RequestBody Emp emp){System.out.println("=====接受到用戶發送數據為:"+emp+"=======");return "success";//跳轉至成功頁面}
前端調用方式(在body體中用json字符串傳值):
要用除GET請求以外的請求方式(GET請求無body體)
{"eid":123,"ename":"xxy","esex":"女"}
二、后端到前端的數據傳遞
1. 使用Model或 ModelAndView傳遞數據到前端
適用于服務端渲染(如 Thymeleaf、JSP)。
后端代碼示例:
@GetMapping("/profile")
public String profile(Model model) {model.addAttribute("username", "John");return "profile"; // 返回視圖名稱
}
前端頁面(Thymeleaf 示例):
<p th:text="'Username: ' + ${username}"></p>
2. 使用HttpServletResponse直接寫回數據
手動通過響應對象返回數據。
后端代碼示例:
@GetMapping("/message")
public void getMessage(HttpServletResponse response) throws IOException {response.getWriter().write("Hello from server");
}
3.使用@ResponseBody將后端數據用JSON格式發送前端
Java對象=====>JSON
后端代碼示例:
@RequestMapping("/show01")@ResponseBodypublic List<Emp> show01(){Emp emp1=new Emp(1,"XXY","女");Emp emp2=new Emp(2,"xhn","男");Emp emp3=new Emp(3,"xxx","女");List<Emp> list=new ArrayList<>();list.add(emp1);list.add(emp2);list.add(emp3);return list;}
前端顯示(json格式輸出對象信息):
[{"eid": 1,"ename": "XXY","esex": "女"},{"eid": 2,"ename": "xhn","esex": "男"},{"eid": 3,"ename": "xxx","esex": "女"}
]
注意事項
- Content-Type 匹配:
@RequestBody
需前端設置application/json
,而@RequestParam
默認支持x-www-form-urlencoded
。 - 參數校驗:結合
@Valid
注解對傳遞的數據進行校驗(如 Bean Validation)。 - 跨域問題:若前后端分離開發,需配置
@CrossOrigin
或全局 CORS 規則。