Spring MVC数据传递全攻略
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 规则。