RequestParam注解的Url参数被省略时该如何处理
RequestParam注解的Url参数被省略时该如何处理
1、RequestParam的用法
====================
RequestParam注解可以把包含在Url中的参数映射到Url处理方法的方法参数。比如,Url是http://domain:port/index?action=xxx¬IncludeTypeId=xxx,这个Url中包含了两个参数,如果要在处理这个Url的方法中取得这两个参数,那么就要在Url的响应方法的方法参数前面用RequestParam来映射Url中参数到方法参数。
如下,代码中,Url http://domain:port/index?action=xx¬IncludeTypeId=xx的响应方法是index方法。
//Url :http://domain:port/index?action=xxx¬IncludeTypeId=xx 的响应方法
@RequestMapping(value = "/index")
public String index(
@RequestParam(value = "action", required = false) String action, @RequestParam(value = "notIncludeTypeId", required = false) int notIncludeTypeId)
{
// .... 处理代码
}
这里就通过RequestParam注解把Url中传来的参数映射成了index方法的方法参数,这样方法参数action就和Url参数action对应,方法参数notIncludeTypeId和Url参数notIncludeTypeId对应。Url中action的值会在触发Url的时候赋给index方法参数action,而Url中notIncludeTypeId的值会赋给index方法的notIncludeTypeId参数。
RequestParam可以有如下两种形式:
@RequestParam String action
这种方式来映射Url参数和方法参数的时候,Url中必须有名字为action的参数,才能实现action参数映射到方法参数action。就是说Url的参数名必须和方法的参数名一致,同时Url中不允许省略要求的参数,比如这里的action参数是不能省略的。
@RequestParam(value="action", required = false | true) String action
这种方式通过value来指明了要把Url中参数名为action的Url参数映射到方法参数action上,同时指明了Url中action参数是否可以省略。如果required的值是false,那么请求Url中可以省略action参数,此时方法参数action会被赋值为null。如果required的值是true,那么请求Url中一定不能省略action参数。
相对来讲这种方式更好一点,因为指示的更为明确。在这种方式中Url中的参数名字和方法的参数名字也可以不一致。
2、当RequestParam映射的Url参数在请求Url中被省略时如何处理
====================================================
如果Request注解过的Url参数在请求的时候被省略了,那么对应方法参数就会被赋值为null。
比如,上面的代码中的action参数是可以省略的,如果请求的时候被省略了,那么action的值就会是null。
这个默认赋值规则要求所有与Url参数对应的方法参数必须是类类型的,而不能是primitive 类型的,因为当Url中的参数一旦省略,那么系统就会给对应的方法参数赋值null,而primitive是不能被赋值为null的。
可是如果,Url中的参数就应该对应一个primitive类型的方法参数的时候,应该如何处理呢?答案是,这是应该使用primitive type对应的包装类型,然后在接下来的程序中再从包装类型的方法参数中取出primitive类型的值,做进一步的处理。
在上面的示例代码中,由于action参数和notIncludeTypeId参数都可以省略,而notIncludeTypeId参数又是int类型的,所以当请求Url中省略了notIncludeTypeId的时候,系统就会报如下的错误。
错误信息:
Optional int parameter 'notIncludeTypeId' is not present
but cannot be translated into a null value due to being declared as a primitive type.
Consider declaring it as object wrapper for the corresponding primitive type.
这里的错误提示信息说的很明白,可选参数notIncludeTypeId不存在,而且又不能被转换为null,因为被声明为primitive类型了。建议考虑对应的包装类型。
所以,这里的解决方法也很简单:使用包装类型代替基本类型,如使用“Integer”代替“int”。
RequestParam注解的Url参数被省略时该如何处理的更多相关文章
- 【转】@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
@RequestParam @RequestBody @PathVariable 等参数绑定注解详解 2014-06-02 11:24 23683人阅读 评论(2) 收藏 举报 目录(?)[+] 引言 ...
- springMVC --@RequestParam注解(后台控制器获取参数)
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取. 1.获 ...
- Angularjs中使用$location获取url参数时,遇到的坑~~~
今天在开发时候,需要用到Angularjs1.4.6获取url参数,网上查了一下,有部分文章提到用$location来获取.大致方法如下 var app = angular.module('myApp ...
- struts2注解redirect传递参数解决方案时,中国的垃圾问题
struts2注解redirect传递参数解决方案时,中国的垃圾问题 试过很多方法 tomcat 编码 .字符串转换 .URLEncoder .. 但是,没有解决方案,然后仔细阅读 stru ...
- SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】
参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定- 默认支持的参数类型 从上面的用法我们可以发现,我们可以使用req ...
- javascript之url转义escape()、encodeURI()和decodeURI(),ifram父子传参参数有中文时出现乱码
ifram父子传参参数有中文时出现乱码,可先在父级页面用encodeURI转义,在到子页面用进行decodeURI()解码 我们可以知道:escape()除了 ASCII 字母.数字和特定的符号外,对 ...
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
为什么返回的数据前面有callback? 这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...
- js 路径改变时获取url参数
当我们在使用react或vue的router作路由跳转时,为了保持菜单与地址栏状态一致,我们可以使用window.onhashchange捕获#后面的变化 window.onhashchange = ...
- @RequestParam注解
SpringMVC的参数指定注解:@RequestParam,有下面四个方法: value 参数绑定,value里写的是URL里参数名称 name 同上 required 是否必需参数,默认为tr ...
随机推荐
- 【爬虫】beautiful soup笔记(待填坑)
Beautiful Soup是一个第三方的网页解析的模块.其遵循的接口为Document Tree,将网页解析成为一个树形结构. 其使用步骤如下: 1.创建对象:根据网页的文档字符串 2.搜索节点:名 ...
- ArcGIS图例标注上标和下标
1. 插入图例 在布局视图下,从插入中选择"图例",我们获得以下的样式: 2. 转为单个图形 选择图例,点击右键,选择"转化为图形",再次点击右键,点击&quo ...
- ORM版,学生管理系统03
关于老师信息管理 建立多对多关系 第一种(通过外键建立) 自己写类,自己使其建立关系 缺点: 不能用Django ORM 多对多操作的语法 class Teacher(models.Model): t ...
- tslib: Selected device is not a touchscreen (must support ABS_X and ABS_Y events)
/************************************************************************************ * tslib: Selec ...
- WPS烦人问题
[原]彻底解决WPS弹出热点广告.WPS购物图标的办法 搜索wpsnotify.exe,删除并新建同名文件. 搜索updateself.exe,删除并新建同名文件. 关闭我的WPS,搜索khomepa ...
- kali视频(1-5)
第二周 kali视频(1-5) 1.kali安装 2.基本配置 vmtools安装过程. 3.安全渗透测试一般流程 4.信息搜集之GoogleHack 5.信息搜集之目标获取 1.kali安装 直接在 ...
- leetcode_sql_4,196
196. Delete Duplicate Emails Write a SQL query to delete all duplicate email entries in a table name ...
- vue前端开发那些事——后端接口.net core web api
红花还得绿叶陪衬.vue前端开发离不开数据,这数据正来源于请求web api.为什么采用.net core web api呢?因为考虑到跨平台部署的问题.即使眼下部署到window平台,那以后也可以部 ...
- WCF 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- 对django整个网站搭建文件的总结
1.比方说现在是写一个使用HTTP 2.0的HTTP服务器,在不改变现有程序配置的情况下,需要重新编译HTTP服务器,比方说,用的是Nginx服务器,需要隐藏服务器版本,如果想要小绿锁 也就是网站安全 ...