@RestController public class TestController { @GetMapping("/") public String test(String name, String sex) { return "name:" + name + "sex:" + sex; } }
请教一下各位这种情况的时候,springMVC 是如何做到准确的将请求中的 name 和 sex 映射到对应的位置。因为编译后就算是通过反射也是拿不到方法的参数名称啊。( java8 指定特殊的编译参数不算)
1
kkkkkrua 2020-04-15 17:37:22 +08:00 via iPhone
debug 进去就一清二楚了
|
2
waa 2020-04-15 17:53:54 +08:00
ParameterNameDiscoverer
|
3
cookii 2020-04-15 17:58:43 +08:00
org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
|
4
gwybiaim 2020-04-15 18:00:17 +08:00
普通反射拿不到,但是字节码里面有变量名称信息
|
5
BBCCBB 2020-04-15 18:05:34 +08:00
ClassReader 或者 java8 -parameter 参数. 然后看 HandlerMethodArgumentResolver
|
6
gotonull OP 谢谢各位的解答,我找到答案了。
spring MVC 底层用了 ASM 来获取方法的形参名 |