SpringMVC是如何查找方法的参数名的

项目中用到SpringMVC,常见的用法像这样

[java]  view plain  copy
  1. @Controller  
  2. @RequestMapping("test")  
  3. class Test{  
  4.     @RequestMapping("/hello")  
  5.     @ResponseBody  
  6.     public Object test(@RequestParameter("name") String name){  
  7.         return "hello! "+name;  
  8.     }  
  9. }  

当GET http://localhost:8080/test/hello?name=aducode请求到服务端时, SpringMVC的 DispatcherServlet处理请求,并根据URL找到@RequestMapping对应的方法,然后根据

@RequestParameter("name") 将url中的name值传递给方法调用

但是Spring还支持默认参数名

表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法参数中定义的是基本数据类型,但是从页面提交过来的数据为null或者”"的话,会出现数据转换的异常。也就是必须保证表单传递过来的数据不能为null或”",所以,在开发过程中,对可能为空的数据,最好将参数数据类型定义成包装类型。 (摘自:SpringMVC的各种参数绑定方式

[java]  view plain  copy
  1. @Controller  
  2. @RequestMapping("test")  
  3. class Test{  
  4.     @RequestMapping("/hello")  
  5.     @ResponseBody  
  6.     public Object test(String name){  
  7.         return "hello! "+name;  
  8.     }  
  9. }  
昨天有人问我这种情况是如何找到url中对应参数的。考虑了一下,使用java的反射机制是不能获取参数名这样的信息的,于是大概查看了一下spring的源码,发现是使用了 org.springframework.core.LocalVariableTableParameterNameDiscoverer 这个类,原理就是读取class字节码,解析其中中的LocalVariableTable,得到方法的参数名称。这样的前提是java编译成class时,必须开启debug,如果关闭debug,就会失效。测试结果如下:


转载自: SpringMVC是如何查找方法的参数名的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值