Spring MVC数据传递
- 一、前端到后端的数据传递
 - 
- [1. 使用 @RequestParam 传递简单参数](#1. 使用 @RequestParam 传递简单参数)
 - [2. 使用 @PathVariable传递路径参数](#2. 使用 @PathVariable传递路径参数)
 - [3. 使用@RequestBody传递 JSON 数据](#3. 使用@RequestBody传递 JSON 数据)
 
 - 二、后端到前端的数据传递
 - 
- [1. 使用Model或 ModelAndView传递数据到前端](#1. 使用Model或 ModelAndView传递数据到前端)
 - [2. 使用HttpServletResponse直接写回数据](#2. 使用HttpServletResponse直接写回数据)
 - 3.使用@ResponseBody将后端数据用JSON格式发送前端
 
 - 注意事项
 
一、前端到后端的数据传递
1. 使用 @RequestParam 传递简单参数
应用于处理页面标签名称和方法参数名称不一致,可以使用此注解实现对应关系
适用于获取 URL 或表单中的简单参数(如 ?name=value)。
后端代码示例:
            
            
              java
              
              
            
          
           //将带来的数据msg作为参数传入方法,并在方法中使用
    @RequestMapping("/show1")
    public String show1(@RequestParam("msg") String msg1){
        System.out.println("=====接受到用户发送数据为:"+msg1+"=======");
        return "success";//跳转至成功页面
    }
        前端调用方式:
- URL 直接传递:
/show1?msg=25 - 表单提交时拼接参数。
 
@RequestParam的defaultValue 属性:设置默认值
            
            
              java
              
              
            
          
          //接收到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 风格)。
后端代码示例:
            
            
              java
              
              
            
          
          //命名不一致时要在注解内带名称值
    @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 
            
            
              java
              
              
            
          
          //命名一致时@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 对象。
后端代码示例:
            
            
              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体)
            
            
              javascript
              
              
            
          
           {
 "eid":123,
  "ename":"xxy",
  "esex":"女"
  }
        二、后端到前端的数据传递
1. 使用Model或 ModelAndView传递数据到前端
适用于服务端渲染(如 Thymeleaf、JSP)。
后端代码示例:
            
            
              java
              
              
            
          
          @GetMapping("/profile")
public String profile(Model model) {
    model.addAttribute("username", "John");
    return "profile"; // 返回视图名称
}
        前端页面(Thymeleaf 示例):
            
            
              html
              
              
            
          
          <p th:text="'Username: ' + ${username}"></p>
        2. 使用HttpServletResponse直接写回数据
手动通过响应对象返回数据。
后端代码示例:
            
            
              java
              
              
            
          
          @GetMapping("/message")
public void getMessage(HttpServletResponse response) throws IOException {
    response.getWriter().write("Hello from server");
}
        3.使用@ResponseBody将后端数据用JSON格式发送前端
               Java对象=====>JSON
        后端代码示例:
            
            
              java
              
              
            
          
           	@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格式输出对象信息):
            
            
              html
              
              
            
          
          [
  {
    "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 规则。