【Spring-MVC】获取请求参数
SpringMVC–04获取请求参数
文章目录
- SpringMVC--04获取请求参数
- 5.1 直接获取
- 5.2 绑定获取
- 5.5 获取多个参数
- 5.4 map获取
- 5.5 对象获取
- 5.6 Restful风格获取参数
- 5.7 关联对象的接收
- 5.8 获得时间参数
5.1 直接获取
我们可以通过和前端的数据传递时的name来获取数据,SpringMVC会将数据名一样的数据帮我们转化好,我们只需要在参数列表中加上对应的名字的数据即可
Jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
参数测试
参数测试
${msg}
Java:
@Controller
public class ParameterTestController {/*** 首页** @return 返回首页*/@GetMapping("/")public String welcomePage() {return "index";}/*** 使用post请求进行拦截* @param name 传入name* @param age 传入age* @param model model模型* @return 视图*/@PostMapping("/")public String getInfo(String name, Integer age, Model model) {model.addAttribute("msg", name + "--->" + age);return "index";}
}
5.2 绑定获取
很多时候后端使用小驼峰命名的方法,而前端使用下划线连接,这时我们就不可以使用上面通过名字直接去获得了,而是需要去将前端的参数绑定
@Controller
public class ParameterTestController {/*** 首页** @return 返回首页*/@GetMapping("/")public String welcomePage() {return "index";}/*** 使用post请求进行拦截** @param userName 传入name,绑定请求中name* @param userAge 传入age,绑定请求中age* @param model model模型* @return 视图*/@PostMapping("/")public String getInfo(@RequestParam("name") String userName, @RequestParam("age") Integer userAge, Model model) {model.addAttribute("msg", userName + "--->" + userAge);return "index";}
}
5.5 获取多个参数
如果前端传入多个参数,我们也可以使用list或者数组来接受,但是这时候必须要使用
@RequestParam来标识这个数据需要SpringMVC来帮我们处理
Jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
参数测试
参数测试
${msg}
List:
@PostMapping("/")
// 这里需要标记list,通知SpringMVC帮助处理
public String getInfo(String name, Integer age,@RequestParam(required = false) List<String> hobbies, Model model) {model.addAttribute("msg", name + "--->" + age + "--->" + hobbies.toString());return "index";
}
数组:
@PostMapping("/")
// 这里同样也需要标注
public String getInfo(String name, Integer age,@RequestParam(defaultValue ="noHobby") String[] hobbies, Model model) {model.addAttribute("msg", name + "--->" + age + "--->" + Arrays.toString(hobbies));return "index";
}
5.4 map获取
在比较原始的方法中是可以通过map集合来获取前端的参数,这样的好处是不需要通过注解去绑定值,参数的name和值会以k-v形式完整的放在map中。
缺点:
- 因为map中的key是唯一的,所有多个同名参数传来的时候是不能存储的,而且因为在SpringMVC中转化参数时也进行了处理,如果是map来接收的话,value会以第一次存入的为主,不会被后面覆盖。
- 多参数,还是需要集合或者数组来接收
Java:
@PostMapping("/")
// 使用map的话也需要标注注解,交给SpringMVC来处理 多个参数还是通过数组获取
public String getInfo(@RequestParam(required = false) Map<String,Object> map, @RequestParam(defaultValue ="noHobby") String[] hobbies, Model model) {// map获取name map获取age model.addAttribute("msg", map.get("name") + "--->" + map.get("age") + "--->" + Arrays.toString(hobbies));return "index";
}
5.5 对象获取
我们也可以通过一个对应的对象来获得参数,SpringMVC会来识别参数,如果是对对象参数的话,会帮助我们自动装配到对应的属性上。
特点:
- 值得注意的是,对于多个参数的获取,不需要我们去通知Spring来处理了,也就是说我们不需要任何对的注解,使用对象就可以简单的活到
- 但是要注意的是我们同样也需要将前端的名字和对象的属性名对应
pojo:
public class AdminInfo {private String name;private Integer age;private List<String> hobbies;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public List<String> getHobbies() {return hobbies;}public void setHobbies(List<String> hobbies) {this.hobbies = hobbies;}@Overridepublic String toString() {return "AdminInfo{" +"name='" + name + '\'' +", age=" + age +", hobbies=" + hobbies +'}';}
}
Java:
@PostMapping("/")
// 这里通过编写的实体类来获得,SpringMVC识别到对象会自动装配
public String getInfo(AdminInfo adminInfo, Model model) {model.addAttribute("msg", adminInfo.getName() + "--->" + adminInfo.getAge() + "--->" + adminInfo.getHobbies());return "index";
}
5.6 Restful风格获取参数
Restful风格的参数不再是在后面使用
?来绑定参数,而是通过/来匹配参数
Jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
参数测试
参数测试
姓名:
年龄:岁
爱好:
唱跳篮球其他
${msg}
Java:
// 将参数声明在url
@GetMapping("/{name}/{age}/{hobbies}")
// 绑定参数
public String getInfo(@PathVariable("name") String adminName, @PathVariable Integer age, @PathVariable String[] hobbies, Model model) {model.addAttribute("msg", adminName + "--->" + age + "--->" + Arrays.toString(hobbies));return "index";
}
5.7 关联对象的接收
如果是俩个对象嵌套为一个对象,SpringMVC也可以通过对象来获取,这时候我们需要在前端传值的时候,需要我们来指定对象里面的对象,比如我们在Form对象里面嵌套一个EmsInfo对象
pojo:
public class EmsInfo implements Serializable {private static final long serialVersionUID = 3866110295644636936L;private String address;private String phone;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "EmsInfo{" +"address='" + address + '\'' +", phone='" + phone + '\'' +'}';}
}
public class Form implements Serializable {private static final long serialVersionUID = 3485707772111567814L;private String name;private String lady;private List<Integer> reason;// 在Form中嵌套emsInfo对象private EmsInfo emsInfo;public EmsInfo getEmsInfo() {return emsInfo;}public void setEmsInfo(EmsInfo emsInfo) {this.emsInfo = emsInfo;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getLady() {return lady;}public void setLady(String lady) {this.lady = lady;}public List<Integer> getReason() {return reason;}public void setReason(List<Integer> reason) {this.reason = reason;}@Overridepublic String toString() {return "Form{" +"name='" + name + '\'' +", lady='" + lady + '\'' +", reason=" + reason +", emsInfo=" + emsInfo +'}';}
}
前端传输name:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
调查问卷
你喜欢什么样的女孩子
Java获得数据:
@PostMapping("/")
public String getData(Form form){System.out.println(form);return "index";
}
5.8 获得时间参数
正常的Spring支持将
2021/6/5这样的格式进行转化为一个Date类
@PostMapping("/testDate")
public String testDate(Form form,Date time) {return "FreeMarkerDemo";
}
局部解决方法:
但是通过其他的方式进行传输的话Spring是不会帮我们转化的,这时候我们需要一个注解
@DateTimeFormat,其中的属性pattern代表时间的格式参数"yyyy年MM月dd日",如果使用的包装类中,我们只需要把该注解加在对应的Date的属性字段上
@PostMapping("/testDate")
// 这里的注解只是局部的,不会影响到其他方法
public String testDate(Form form, @DateTimeFormat(pattern = "yyyy年MM月dd日") Date time) {return "FreeMarkerDemo";
}
全局解决方案:
全局的解决方案可以通过编写一个Converter类来处理数据的转化,在后面有详细的说明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
