SpringMVC:如何获取到请求携带的参数?
使用springMVC进行获取请求参数,很便捷。
一、获取基本数据类型参数
自动匹配请求中name与响应方法中参数的属性名一致的参数,自动完成类型转换和赋值。
例子:
接受对login的请求,获取到请求携带的参数。
@Controller public class LoginController { @RequestMapping("login") public void demo(String name,int age){ //获取的请求数据中名为name和age的值,并且自动转换类型 System.out.println("获取到了参数"+name+age); } }
请求:
响应:
(一)、请求中name与响应方法中参数的属性名不一致时
通过RequestPraam注解的 value属性 进行映射。
例子:
设置name为usname的映射参数为name,设置name为usage的映射参数为age
@Controller public class LoginController { @RequestMapping("login") public void demo(@RequestParam("usname") String name,@RequestParam("usage") int age){ System.out.println("获取到了参数"+name+age); } }
请求:
响应:
(二)、请求中没有传参数过来,设置默认值
如果是基本数据类型,则会报错。如果是包装类,则会赋值为null。
通过RequestPraam注解的 defaultValue属性 设置默认值。
例子:
给name设置默认值redPig,给age设置默认值3。
@Controller public class LoginController { @RequestMapping("login")//配置方法映射的逻辑名 public void demo(@RequestParam(defaultValue = "redPig") String name,@RequestParam(defaultValue = "3") int age){ System.out.println("获取到了参数"+name+age); } }
请求:
响应:
(三)、避免包装类获取到null值
场景:我需要浏览器提供name的值作为sql查询条件,此时浏览器不传的话会默认拿到null。
通过RequestPraam注解的 required属性 设置为true,即必须传参。
例子:
@Controller public class LoginController { @RequestMapping("login")//配置方法映射的逻辑名 public void demo(@RequestParam(required = true)String name){ System.out.println("获取到了参数:name-"+name); } }
请求:
响应:
(四)、同名参数存入集合中
场景:多选框提交了多个同名参数。
通过RequestPraam注解的 value属性 解决。
例子:
public class LoginController { @RequestMapping("login")//配置方法映射的逻辑名 public void demo(@RequestParam("favs") List<String> list){ System.out.println("获取到了同名参数内容:"+list); } }
请求:
响应:
二、获取参数放入到对象中
如果参数的name值和对象的属性值一致,则会通过属性的get/set方法进行自动注入。
pojo对象User:
例子:
把参数自动注入到对象中。
@Controller public class LoginController { @RequestMapping("login") public void demo(User user){ System.out.println("参数自动注入到对象中了:"+user); } }
请求:
响应:
三、restful风格传参数
把参数以 / 分割放在请求后面。
使用RequestMapping注解配置请求方法和携带的参数,使用PathVariable注解配置参数获取来源。
例子:
@Controller public class LoginController { @RequestMapping("login/{uage}/{name}") public void demo(@PathVariable String name,@PathVariable("uage") int age){//可以自定义映射名(没必要) System.out.println("restful风格获取参数:"+name+":"+age); } }
请求:
响应:
注意:
使用restful风格会导致访问目录出现差错,所以在跳转的时候不要使用相对路径。