springboot怎么动态获取配置啊(springboot控制器参数默认值设置)

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

边肖将与你分享如何使用回弹获得控制器参数。相信大多数人对它还不太了解,所以我将这篇文章分享给大家参考。希望你看完这篇文章后收获多多。让我们一起来发现吧!

如题,这里介绍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形式。

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

如果我们的请求URL中的名称没有给出参数值http://localhost :8080/param/无注释?姓名=年龄=12岁核心=89.1

请求可以正常跳转

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

如果我们将int或long参数留空,给URL http://localhost :8080/param/无注释?name=lisiage=12score=

该请求将报告一个错误

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

无法将字符串参数转换为所需的双精度值。

这里可以看到,如果我们不为参数赋值,那么默认情况下,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

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

怎么使用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")
	@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后面的参数值设置为空,请求可以正常跳转

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

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

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

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

接收前端传递的数组

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”之间用“,”隔开

页面可以正常跳转

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

通过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

正常跳转

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

如果中间某个参数可能为空呢,查了下@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获取控制器参数

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/150316.html

(0)

相关推荐

  • 马飞,马飞的《长安县》 歌词

    技术马飞,马飞的《长安县》 歌词歌名:《长安县》   演唱:马飞   作词:马飞   作曲:马飞   专辑:《当初就不应该学吉他》   歌词:   骑着车子来到长安县   来上一个大碗的油泼面   长安县 那么些年 都么

    生活 2021年10月26日
  • Nginx配置中FastCGI的几个命令分别是什么

    技术Nginx配置中FastCGI的几个命令分别是什么Nginx配置中FastCGI的几个命令分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能

    攻略 2021年11月12日
  • java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务

    技术java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务这篇文章主要讲解了“java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务”,文中的讲解内容简单清晰,

    攻略 2021年11月15日
  • 氧气的化学符号,氧气的化学符号在电脑上怎么打呀

    技术氧气的化学符号,氧气的化学符号在电脑上怎么打呀1氧气的化学符号、要输入上、下标,有两种更快捷的方法:方法一;使用格式刷:在文件中选择已输入好的上标或下标,然后单击“格式刷”图标,光标变成了一个刷子的形状,在需要设置的

    生活 2021年10月25日
  • 怎么用Linux查询OS、CPU、内存、硬盘信息

    技术怎么用Linux查询OS、CPU、内存、硬盘信息这篇文章主要讲解了“怎么用Linux查询OS、CPU、内存、硬盘信息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么

    攻略 2021年10月21日
  • 如何探讨Java代理模式与反射机制的实际应用

    技术如何探讨Java代理模式与反射机制的实际应用如何探讨Java代理模式与反射机制的实际应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java提供了一套

    攻略 2021年11月21日