Spring MVC数据传递
一、前端到后端的数据传递
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")
@ResponseBody
public 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 规则。