文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用springboot获取控制器参数

2023-06-22 03:48

关注

小编给大家分享一下怎么使用springboot获取控制器参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

如题,这里介绍springboot 获取控制器参数有四种方式

无注解下获取参数

使用@RequestParam获取参数

传递数组

通过URL传递参数

无注解下获取参数

无注解下获取参数,需要控制器层参数与HTTP请求栏参数名称一致,这样后台就可以获取到请求栏的参数。

@RequestMapping("/param/noannotation")@ResponseBodypublic 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:http://localhost:8080/param/noannotation?name=zhangsan&age=14&score=89.1

前端页面会自动得到我们输入的参数的json形式

怎么使用springboot获取控制器参数

如果我们的请求URL中name不给参数值 http://localhost:8080/param/noannotation?name=&age=12&score=89.1

请求可以正常跳转

怎么使用springboot获取控制器参数

如果我们将int 或 long 参数为空,给URL http://localhost:8080/param/noannotation?name=lisi&age=12&score=

请求会报错

怎么使用springboot获取控制器参数

无法将String型参数转化为需要的double型。

这里可以看出,如果我们不给参数赋值,那么spring会将空着的参数默认按照String型空字符串处理。所以,如果是String型的参数,为空时不报错的;若是非String型参数,则必须非空。

使用@RequestParam获取参数

上面的无注解情况下,HTTP参数与控制器参数名称必须一致。若HTTP参数与控制器参数不一致时,我们就需要将前端参数与后端参数对应起来,这里我们使用@RequestParam来确定前后端参数名称的映射关系。

@RequestMapping("/param/requestparam")@ResponseBodypublic 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

可以正常跳转,并将结果展示在前端

怎么使用springboot获取控制器参数

如果将URL中username后面值置空,页面可以正常跳转,测试URL

http://localhost:8080/param/requestparam?username=&user_age=12&score=45.6

怎么使用springboot获取控制器参数

若我们将user_age 或 score值置空,则页面会报错

怎么使用springboot获取控制器参数

与上面无注解时错误相同,这里不做解释了。

如果我们删除掉URL栏里面username参数项,URL为 http://localhost:8080/param/requestparam?user_age=12&score=45.6

页面无法正常跳转,报错如下

怎么使用springboot获取控制器参数

那如果实际中,我们确实有前端可传可不传的参数时,怎么办?@RequestParam注解给了一个required属性,标注该参数项是否必须有,其默认值为true,即必须传值;若该值可能为空,则将required置为false。注意,此时,@RequestParam后面的数据类型必须为包装类型,不可以是简单类型,若为简单类型,依然会报错。包装类型时,可以接收null对象;若为简单类型,则系统依然会将空字符串与对应的简单类型进行强转,转换失败的,则抛异常出来。

我们将上面方法参数做部分修改,修改如下,由于篇幅关系,这里不再整体贴整个方法

@RequestMapping("/param/requestparam")@ResponseBodypublic 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后面的参数值设置为空,请求可以正常跳转

怎么使用springboot获取控制器参数

我们再修改一下URL参数项,http://localhost:8080/param/requestparam?username=zhangsan&user_age=&score=

系统会报400错误,提示score是空字符串,如果将数据类型double修改为Double,就会返回null了,这个这里就不测试了

怎么使用springboot获取控制器参数

接收前端传递的数组

springMVC中,前端往后端除了可以传递一些单值外,也可以传递数组。传递数据部分没有太多规则可言,在后台控制器部分,定义数组形式接收数据,前端传递时,将一组数据用英文的逗号“,”隔开就可以了。

@RequestMapping("/param/requestarray")@ResponseBodypublic 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”之间用“,”隔开

页面可以正常跳转

怎么使用springboot获取控制器参数

通过URL传递参数

这里通过URL传递参数与上面的URL不同,上面的URL中均需写明参数名和对应参数值,这里的URL传递参数,仅需要在地址栏输入参数值,然后后台自动匹配到对应的参数名。springMVC通过使用处理器映射和@PathVariable注解的组合来获取URL参数。首先通过处理器映射可以定位参数的位置和名称,而@PathVariable则可以通过名称来获取参数。

@RequestMapping("/param/geturl/{name}/{age}/{score}")@ResponseBodypublic 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

正常跳转

怎么使用springboot获取控制器参数

如果中间某个参数可能为空呢,查了下@PathVariable注解有required属性,但是经测试,发现这个属性无法单独使用。

如果中间某个参数为空,还得借用@RequestMapping 支持多URL的属性进行处理

假如,age属性可能为空,那么修改代码为

@RequestMapping(value = {"/param/geturl/{name}/{age}/{score}", "/param/geturl/{name}/{score}"})@ResponseBodypublic 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获取控制器参数

以上是“怎么使用springboot获取控制器参数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯