Java笔记--SpringMVC--@RequestMapping

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter(“name”),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解

一、基本使用,获取提交的参数
后端代码:
Java代码 收藏代码
@RequestMapping(“/delUser.action”)
public String delUser(@RequestParam(value=”id”,required=true)int ids){
System.out.println(ids);
// System.out.println(“数组长度:”+ids.length);
// for (int i : ids) {
// System.out.println(“删除ID:”+i);
// userMap.remove(i);
// }
return “redirect:/toUserList.action”;
}

前端代码:
Html代码 收藏代码

可以看到spring会自动根据name=”id”参数名字封装注入到(@RequestParam(value=”id”,required=true),两个id名字一致,可以将前端的id传给后台的ids

二、各种异常情况处理
1、可以对传入参数指定参数名
Java代码 收藏代码
//javaBean中的id为Integer类型
@RequestParam Integer ids 不推荐这样写(注意,最后一个例子没有提供清晰的参数名。当且仅当代码带调试(Debug)符号编译时,结果会提取名为“ids”的参数,否则,将抛出IllegalStateException异常,因为当前的信息不足以从请求中提取参数。由于这个原因,在编码时最好显式的指定参数名。)
// 下面的对传入参数指定为aa,如果前端不传aa参数名(前端是id3),会报错
@RequestParam(value=”id”) Integer ids

错误信息:
HTTP Status 400 - Required String parameter ‘id’ is not present

2、可以通过required=false或者true(不写默认就是true)来要求@RequestParam配置的前端参数是否一定要传
Java代码 收藏代码
//前端是name=”id3”
// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有(不传入就会出现异常1中情况)
@RequestMapping(“/delUser.action”)
public String delUser(@RequestParam(value=”id”,required=false)Integer ids)
System.out.println(ids);//这时输出为null

3、如果用@RequestMapping注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以
错误:HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter ‘id’ is 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.
Java代码 收藏代码
@RequestMapping(“/delUser.action”)
public String delUser(@RequestParam(value=”id”,required=false)int ids){
System.out.println(ids);
return “redirect:/toUserList.action”;
}

解决方法:
“Consider declaring it as object wrapper for the corresponding primitive type.”建议使用包装类型代替基本类型,如使用“Integer”代替“int”,这是会默认赋值null给ids.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值