糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【Spring-MVC】获取请求参数

【Spring-MVC】获取请求参数

时间:2024-01-19 04:54:12

相关推荐

【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" %><html lang="en"><head><meta charset="UTF-8"><title>参数测试</title></head><body><h2>参数测试</h2><form method="post" action="/">姓名:<input type="text" name="name"><br/>年龄:<input type="number" name="age" min="0" max="100" value="18">岁<br/><button>doPost New</button></form><div>${msg}</div></body></html>

Java:

@Controllerpublic 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 绑定获取

很多时候后端使用小驼峰命名的方法,而前端使用下划线连接,这时我们就不可以使用上面通过名字直接去获得了,而是需要去将前端的参数绑定

@Controllerpublic 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" %><html lang="en"><head><meta charset="UTF-8"><title>参数测试</title></head><body><h2>参数测试</h2><form method="post" action="/">姓名:<input type="text" name="name"><br/>年龄:<input type="number" name="age" min="0" max="100" value="18">岁<br/>爱好:<div><input type="checkbox" name="hobbies" value="sing">唱<input type="checkbox" name="hobbies" value="dance">跳<input type="checkbox" name="hobbies" value="basketball">篮球<input type="checkbox" name="hobbies" value="other">其他</div><button>doPost New</button></form><div>${msg}</div></body></html>

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获取namemap获取agemodel.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" %><html lang="en"><head><meta charset="UTF-8"><title>参数测试</title></head><body><h2>参数测试</h2>姓名:<input type="text" name="name" id="name"><br/>年龄:<input type="number" name="age" id="age" min="0" max="100" value="18">岁<br/>爱好:<div><input type="checkbox" name="hobbies" value="sing">唱<input type="checkbox" name="hobbies" value="dance">跳<input type="checkbox" name="hobbies" value="basketball">篮球<input type="checkbox" name="hobbies" value="other">其他</div><button id="submit_btn" οnclick="submit()">doPost New</button><div>${msg}</div></body><script type="application/javascript">let submit = function () {// 获取name值let name = document.getElementById("name").value;// 获取age值let age = document.getElementById("age").value;// 声明字符串和数组let hobbies = "", arr = [];// 获得爱好标签let els = document.getElementsByName("hobbies");// 遍历标签for (let i = 0; i < els.length; i++) {// 如果选择,加入数组if (els[i].checked === true) {arr.push(els[i].value);}}// 将数组转化为字符串hobbies = arr.join(",");// restful风格访问window.location = "/" + name + "/" + age + "/" + hobbies;}</script></html>

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" %><html><head><title>调查问卷</title></head><body><h1>你喜欢什么样的女孩子</h1><form action="/" method="post"><h3><label for="name">你的名字是:</label></h3><input id="name" name="name"><br/><h3><label for="lady">你的女神是:</label></h3><select id="lady" name="lady"><option value="Yoona">林允儿</option><option value="Orange">橙子</option><option value="Actress">天海翼</option><option value="Java">Java</option></select><h3><label for="lady">你喜欢她的原因是:</label></h3><div><h3>你喜欢她的原因是:</h3><input type="checkbox" name="reason" value="1">长相甜美<input type="checkbox" name="reason" value="2">为了学习<input type="checkbox" name="reason" value="3">演技精湛<input type="checkbox" name="reason" value="4">其他</div><div><%--在这里的name是我们对应form对象里面的emsinfo对象,所以我们使用emsInfo来点出属性--%>邮件地址:<input type="text" name="emsInfo.address"><br/>手机:<input type="text" name="emsInfo.phone"></div><button>点我提交</button></form></body></html>

Java获得数据:

@PostMapping("/")public String getData(Form form){System.out.println(form);return "index";}

5.8 获得时间参数

正常的Spring支持将/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类来处理数据的转化,在后面有详细的说明

如果觉得《【Spring-MVC】获取请求参数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。