springboot获取控制器参数的⼏种⽅式如题,这⾥介绍springboot 获取控制器参数有四种⽅式
1、⽆注解下获取参数
2、使⽤@RequestParam获取参数
3、传递数组
4、通过URL传递参数
⽆注解下获取参数
⽆注解下获取参数,需要控制器层参数与HTTP请求栏参数名称⼀致,这样后台就可以获取到请求栏的参数。
/**
* ⽆注解获取参数时,参数名称和HTTP请求参数必须⼀致
* @param name String 姓名
* @param age int 年龄
* @param score double 分数
* @return 响应json字符-@ResponseBody注解将map转为json
*/
@RequestMapping("/param/noannotation")
@ResponseBody
public Map<String, Object> noAnnotation(String name,int age, double score) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("name", name);
paramMap.put("age", age);
paramMap.put("score", score);
return paramMap;
}
⽅法中,我们接收三个参数,分别为name,age和score
启动springboot后,在浏览器中请求URL:
前端页⾯会⾃动得到我们输⼊的参数的json形式
如果我们的请求URL中name不给参数值
请求可以正常跳转
如果我们将int 或 long 参数为空,给URL
请求会报错
⽆法将String型参数转化为需要的double型。
这⾥可以看出,如果我们不给参数赋值,那么spring会将空着的参数默认按照String型空字符串处理。所以,如果是String型的参数,为空时不报错的;若是⾮String型参数,则必须⾮空。
使⽤@RequestParam获取参数
上⾯的⽆注解情况下,HTTP参数与控制器参数名称必须⼀致。若HTTP参数与控制器参数不⼀致时,我们就需要将前端参数与后端参数对应起来,这⾥我们使⽤@RequestParam来确定前后端参数名称的映射关系。
/**
* 使⽤@RequestParam获取参数
* 这⾥RequestParam注解会将括号⾥⾯的前端参数名称转化为后⾯的参数名称
* @param name String 姓名,接收前端username参数
* @param age int 年龄,接收前端user_age参数
* @param score double 分数,接收前端score参数
* @return 响应json字符
*/
@RequestMapping("/param/requestparam")
@ResponseBody
public Map<String, Object> requestParam(
@RequestParam("username") String name,
@RequestParam("user_age") int age,
@RequestParam("score") double score) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("name", name);
paramMap.put("age", age);
paramMap.put("score", score);
return paramMap;
}
⽅法中,我们接收前端的username,user_age和score,然后使⽤@RequestParam注解将其转化映射为name,age和age。
启动springboot后,URL栏输⼊
可以正常跳转,并将结果展⽰在前端
如果将URL中username后⾯值置空,页⾯可以正常跳转,测试URL
若我们将user_age 或 score值置空,则页⾯会报错
与上⾯⽆注解时错误相同,这⾥不做解释了。
如果我们删除掉URL栏⾥⾯username参数项,URL为
页⾯⽆法正常跳转,报错如下
那如果实际中,我们确实有前端可传可不传的参数时,怎么办?@RequestParam注解给了⼀个required属性,标注该参数项是否必须有,其默认值为true,即必须传值;若该值可能为空,则将required置为false。注意,此时,@RequestParam后⾯的数据类型必须为包装类型,不可以是简单类型,若为简单类型,依然会报错。包装类型时,可以接收null对象;若为简单类型,则系统依然会将空字符串与对应的简单类型进⾏强转,转换失败的,则抛异常出来。
我们将上⾯⽅法参数做部分修改,修改如下,由于篇幅关系,这⾥不再整体贴整个⽅法
@RequestMapping("/param/requestparam")
@ResponseBody
public Map<String, Object> requestParam(
@RequestParam("username") String name,
@RequestParam(value = "user_age", required = false) Integer age,
@RequestParam(value = "score", required = false) double score) {
上⾯,我们将age对应的类型修改为Integer包装类型,required设置为false;score,只是设置required设置为false
启动springboot做测试,
这⾥我们将user_age后⾯的参数值设置为空,请求可以正常跳转
我们再修改⼀下URL参数项,
系统会报400错误,提⽰score是空字符串,如果将数据类型double修改为Double,就会返回null了,这个这⾥就不测试了
接收前端传递的数组
springMVC中,前端往后端除了可以传递⼀些单值外,也可以传递数组。传递数据部分没有太多规则可⾔,在后台控制器部分,定义数组形式接收数据,前端传递时,将⼀组数据⽤英⽂的逗号“,”隔开就可以了。
@RequestMapping("/param/requestarray")
@ResponseBody
param namepublic Map<String, Object> requestArray(String[] names, int[] ages, double[] scores) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("name", names);
paramMap.put("age", ages);
paramMap.put("score", scores);
return paramMap;
}
启动springboot,URL为
我们使⽤names接收所有的name,多个name值“zhangsan”、“lisi”和“wangwu”之间⽤“,”隔开
页⾯可以正常跳转
通过URL传递参数
这⾥通过URL传递参数与上⾯的URL不同,上⾯的URL中均需写明参数名和对应参数值,这⾥的URL传递参数,仅需要在地址栏输⼊参数值,然后后台⾃动匹配到对应的参数名。springMVC通过使⽤处理器映射和@PathVariable注解的组合来获取URL参数。⾸先通过处理器映射可以定位参数的位置和名称,⽽@PathVariable则可以通过名称来获取参数。
/**
* 使⽤URL传参
* URL传参时,⽅法请求URL后使⽤{}包含参数名称,多个参数之间使⽤/分隔
* @param name 姓名
* @param age 年龄
* @param score 成绩
* @return 响应的json数据
*/
@RequestMapping("/param/geturl/{name}/{age}/{score}")
@ResponseBody
public Map<String, Object> getUrlParam(
@PathVariable("name") String name,
@PathVariable("age") Integer age,
@PathVariable("score") Double score) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("name", name);
paramMap.put("age", age);
paramMap.put("score", score);
return paramMap;
}
⽅法中,我们使⽤了3个{ },分别代表变量name、age和score,⽅法变量中使⽤@PathVariable来接收变量,并映射为⽅法的变量
启动springboot测试,URL为
正常跳转
如果中间某个参数可能为空呢,查了下@PathVariable注解有required属性,但是经测试,发现这个属性⽆法单独使⽤。
如果中间某个参数为空,还得借⽤@RequestMapping ⽀持多URL的属性进⾏处理
假如,age属性可能为空,那么修改代码为
@RequestMapping(value = {"/param/geturl/{name}/{age}/{score}",
"/param/geturl/{name}/{score}"})
@ResponseBody
public Map<String, Object> getUrlParam(
@PathVariable("name") String name,
@PathVariable(value = "age", required = false) Integer age,
@PathVariable("score") Double score) {
其中,后⾯的URL中没有了age参数,这⾥,视有⽆age的请求为不同的请求
使⽤URL 做测试,可以正常跳转
上⾯就是这篇博⽂要介绍的四种获取前端参数的四种⽅式,内容均为本⼈学习整理所得,若其中有不严谨之处,欢迎批评斧正。关于获取前端参数,不⽌上⾯四种⽅式,就了解到的还有获取json和格式化参数两种形式,由于涉及页⾯内容,本篇博⽂暂时不做介绍,后⾯单独整理。谢谢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论