边肖将与你分享如何使用回弹获得控制器参数。相信大多数人对它还不太了解,所以我将这篇文章分享给大家参考。希望你看完这篇文章后收获多多。让我们一起来发现吧!
如题,这里介绍springboot 获取控制器参数有四种方式
1.获取不带注释的参数。
2.使用@RequestParam获取参数
3.传递数组
4.通过网址传递参数
00-1010要获取不带注释的参数,需要控制器层参数与HTTP请求列参数名称一致,这样后台才能获取请求列的参数。
/**
*获取不带标注的参数时,参数名称和HTTP请求参数必须一致。
*@paramnameString名称
*@paramageint年龄
*@paramscoredouble评分
*@return response json字符-@ResponseBody注释将映射转换为json
*/
@ RequestMapping('/param/no annotation ')
@ResponseBody
publicMapString,ObjectnoAnnotation(Stringname,intage,double score){ 0
MapString,ObjectparamMap=new hashmapstring,Object();
paramMap.put('name ',name);
paramMap.put('age ',age);
paramMap.put('score ',score);
returnparamMap
}方法,我们接收三个参数,即姓名、年龄和分数。
启动springboot后,在浏览器中请求网址:http://localhost :8080/param/无批注?name=zhangsanage=14score=89.1
首页会自动得到我们输入的参数的json形式。
如果我们的请求URL中的名称没有给出参数值http://localhost :8080/param/无注释?姓名=年龄=12岁核心=89.1
请求可以正常跳转
如果我们将int或long参数留空,给URL http://localhost :8080/param/无注释?name=lisiage=12score=
该请求将报告一个错误
无法将字符串参数转换为所需的双精度值。
这里可以看到,如果我们不为参数赋值,那么默认情况下,spring会将空参数视为空字符串。因此,如果是String参数,则为空时不会报告错误;如果不是字符串参数,它必须是非空的。
无注解下获取参数
在上面没有注释的情况下,HTTP参数和控制器参数的名称必须相同。如果HTTP参数与控制器参数不一致,我们需要将前端参数与后端参数进行匹配。这里,我们使用@RequestParam来确定前端和后端参数名之间的映射关系。
/**
*使用@RequestParam获取参数
*在这里,RequestParam注释将括号中的前参数名转换为后参数名。
*@paramnameString名称,接收前端用户名参数
*@paramageint年龄
,接收前端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栏输入 http://localhost:8080/param/requestparam?username=lisi&user_age=12&score=45.6
可以正常跳转,并将结果展示在前端
如果将URL中username后面值置空,页面可以正常跳转,测试URL
http://localhost:8080/param/requestparam?username=&user_age=12&score=45.6
若我们将user_age 或 score值置空,则页面会报错
与上面无注解时错误相同,这里不做解释了。
如果我们删除掉URL栏里面username参数项,URL为 http://localhost:8080/param/requestparam?user_age=12&score=45.6
页面无法正常跳转,报错如下
那如果实际中,我们确实有前端可传可不传的参数时,怎么办?@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做测试,http://localhost:8080/param/requestparam?username=zhangsan&user_age=&score=89
这里我们将user_age后面的参数值设置为空,请求可以正常跳转
我们再修改一下URL参数项,http://localhost:8080/param/requestparam?username=zhangsan&user_age=&score=
系统会报400错误,提示score是空字符串,如果将数据类型double修改为Double,就会返回null了,这个这里就不测试了
接收前端传递的数组
springMVC中,前端往后端除了可以传递一些单值外,也可以传递数组。传递数据部分没有太多规则可言,在后台控制器部分,定义数组形式接收数据,前端传递时,将一组数据用英文的逗号“,”隔开就可以了。
@RequestMapping("/param/requestarray") @ResponseBody public 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为
http://localhost:8080/param/requestarray?names=zhangsan,lisi,wangwu&ages=12,14,15&scores=78.9,98,67
我们使用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为 http://localhost:8080/param/geturl/zhangsan/12/89
正常跳转
如果中间某个参数可能为空呢,查了下@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 http://localhost:8080/param/geturl/zhangsan//89 做测试,可以正常跳转
以上是“怎么使用springboot获取控制器参数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150316.html