Spring如何在没有调试信息的情况下获取参数名称
问题内容:
@RequestMapping("/form")
public String form(Model model, Integer id)
例如,spring可以知道参数id的名称为id并在运行时将请求参数的值绑定到该参数
问题答案:
这是JDK 8中引入的javac的功能。您需要包括-parameters
javac命令行选项才能将其激活。然后,您将能够获得像这样的参数名称:
String name = String.class.getMethod("substring", int.class).getParameters()[0].getName()
System.out.println(name);
从Spring文档3.3 Java
8(以及6和7)开始
您还可以使用Java 8的参数名称发现(基于-parameters编译器标志)来替代启用了调试信息的代码。
如ParameterNameDiscoverer类的javadoc中所指定:
参数名称发现并不总是可能的,但是可以尝试各种策略,例如寻找可能在编译时发出的调试信息,以及寻找可选地带有AspectJ注释方法的argname注释值。
这是Spring项目Java
8参数名称发现中有关方法和构造函数的
相关JIRA项目的链接
JDK增强建议JEP 118:在运行时访问参数名称