前言
今天我们聊一聊关于url地址中的传递的参数是如何与我们后端的逻辑代码对应的。
1. 提交的参数名称和处理方法的参数名一致
由于MVC底层具有良好的匹配规范,我们不必再像JavaWeb那样通过request.getParameter(“xxx”) 获取前端传递的参数了,只要名字一致可以直接获取。
[1] 提交数据: http://localhost:8080/hello?name=gs
[2] 处理方法
这里的name可以直接获取url中参数传递的值
@RequestMapping("/hello")
public String hello(String name){
System.out.println(name);
return "hello";
}
控制台上可以输出: gs
2. 提交的参数的名称和处理方法的参数名不一致
通过@RequestParam指定对应的参数名称
[1] 提交数据:http://localhost:8080/hello?username=gs
[2] 处理方法(通过@RequestParam映射相应的参数名)
//@RequestParam("username"): username提交的域的名称
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name){
System.out.println(name);
return "hello";
}
控制台上可以输出: gs
3. 提交的是一个对象
由于这里不是单一的数据类型,要求我们表单提交的数据封装成一个对象,且表单项的名字要和对象的属性名一致
[1] 编写实体类 (这里省略了get,set方法)
User.class
package com.gs.pojo;
public class User {
private int id;
private String name;
private int age;
}
[2] 提交的数据为:http://localhost:8080/user/t2?id=1&name=gs&age=18
[3] 处理的方法
通过一个对象封装前端传递的参数
@GetMapping("/t2")
public String test2(User user){
System.out.println(user);
//1.视图跳转
return "test";
}
控制台输出的数据
聊完后台接收前端的数据后,我们再谈谈后台如何传递数据给前端
4. 数据显示到前端
共有三种方式:
第一种通过ModelAndView (这个不仅可以封装数据,还可以设置视图名。在实现接口的方式中较为常用)
第二种通过ModelMap (它继承了LinkedHashMap,除了传递数据后,同时拥有LinkedHashMap的方法和属性)
第三种通过Model (这是ModelMap 的精简类型,它只负责传递数据,操作简单,使用广泛)
简单对比:
Model :只有寥寥几个方法只适合用于存储数据,简化了新手对Model对象的操作和理解
ModelMap: 继承了LinkedHashMap,除了实现自身的一些方法,同时拥有LinkedHashMap的方法和属性
ModelAndView: 可以在存储数据的同时,设置返回的逻辑视图,进行控制层的跳转 (一般使用在控制层是实现接口的情况下,但现在的开发中大多使用注解类型,所以这个比较少用,我们一般都直接使用Model即可)