@RequestParam和@PathVariable使用

之前一直用到@RequestParam和@PathVariable这两个注解,今天有空就来总结一下

一.@RequestParam

@RequestParam用于获取参数,可获取?username="sss"这种?后面的参数值

方式一:

//在url中输入:localhost:8080/**/?userName=zhangsan
//请求中包含username参数(如/requestparam1?userName=zhang),则自动传入。
public String queryUserName(@RequestParam String userName)

方式二:

处理参数名称不一致的情况,如果前台传入lid到后台,可给该参数设置别名为id(也可将String类型换成int,会自动转换),用@RequestParam注解从请求参数中映射到控制器中的参数时,控制器的参数一定要用对象类型或简单类型的包装类。例如@RequestParam(value="lid") Integer id)不能写成@RequestParam(value="lid") int id),不能用简单int类型去接收请求中的整数。因为,若请求中的对象为空,则int类型的参数不能接收空对象,int类型的参数必须要有一个默认值的。 
若想用简单类型去接收请求中的值,需要赋值一个默认值,写成如下的形式:@RequestParam(value = "lid", required = false, defaultValue = "0") int id)

@RequestMapping("/")
public String Demo1(@RequestParam(name="lid") String id){

    System.out.println("----"+id);
    return id;
}

控制台输出

----10

特殊一:

但是在传递参数的时候如果是url?userName=zhangsan&userName=wangwu时,即两个同名参数,前台传递了两个一样的参数,可用如下方式:

public String requestparam8(@RequestParam(value="userName") String []  userNames)
//或者是
public String requestparam8(@RequestParam(value="list") List<String> list)  

特殊二: 

前端传参的URL: url = “${ctx}/main/mm/am/edit?Id=${Id}&name=${name}” 后端使用集合来接受参数,灵活性较好

@RequestMapping("/edit")
    public String edit(Model model, @RequestParam Map<String, Object> paramMap ) {
        long id = Long.parseLong(paramMap.get("id").toString());
        String name = paramMap.get("name").toString;
        return page("edit");
    }

基本参数绑定容易出现的问题

@RequestParam绑定基本数据类型,若required属性为false(默认为true),且设置了defaultValue属性,没有问题;

@RequestParam绑定基本数据类型,若required属性为false(默认为true),且没有设置defaultValue属性,则当没有传该参数时,会报500(因为无法将null赋值给基本数据类型)

二.@PathVariable

使用@PathVariable接收参数,参数值需要在url进行占位, 前端传参的URL:url = “${ctx}/main/mm/am/edit/${Id}/${name}”

@RequestMapping("/edit/{id}/{name}")
    public String edit(Model model, @PathVariable long id,@PathVariable String name) {
        
        return page("edit");
    }

PathVariable 汉语意思是:路径变量,顾名思义,就是要获取一个url 地址中的一部分值,哪一部分呢? RequestMapping 上说明了@RequestMapping(value="/edit/{id}/{name}"),我就是想获取你URL地址 /edit/ 的后面的那个 {id}以及{name}。

例如下列地址:http://localhost:8989/SSSP/emp/7

如果我需要获取emp后面的7,如下:

@RequestMapping(value="/emp/{id}",method=RequestMethod.GET)  
public String edit(@PathVariable("id")Integer id,Map<String , Object>map){  
    Employee employee = employeeService.getEmployee(id);  
    List<Department> departments = departmentService.getAll();  
    map.put("employee", employee);  
    map.put("departments", departments);  
    return "emp/input";  
}  

 

  • 35
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值