福州外网站建设,wordpress上传图片占空间,网建安,wordpress不显示更新继续之前的博客文章有关构造函数和方法参数以及Java在运行时不保留参数名称的情况–先前的文章涉及构造函数不保留参数名称及其对Spring中的Contructor注入的含义#xff0c;在此我将介绍更多内容不保留参数名称的情况对Spring有影响#xff1a;  1.考虑带参数的Spring MVC C…   继续之前的博客文章有关构造函数和方法参数以及Java在运行时不保留参数名称的情况–先前的文章涉及构造函数不保留参数名称及其对Spring中的Contructor注入的含义在此我将介绍更多内容不保留参数名称的情况对Spring有影响   1.考虑带参数的Spring MVC Controller方法绑定到传入的请求参数  RequestMapping(value/members/find)public String getMembersByName(RequestParam String name){...return list;} 在这里参数“名称”具有与之关联的RequestParam批注这表明Spring MVC会将请求参数“名称”绑定到该方法参数。   由于参数名称在运行时未保留因此Spring可能会引发异常  Request processing failed; nested exception is java.lang.IllegalArgumentException: Name for argument type  not available, and parameter name i
nformation not found in class file either. 此处的修复很简单可以使用调试选项进行编译这些调试选项将在运行时保留参数名称或者更好的方法是简单地指示期望的请求参数名称是什么作为RequestParam批注的参数  RequestMapping(value/members/find)
public String getMembersByName(RequestParam(name) String name){return list;
} 2.同样考虑另一种Spring MVC控制器方法这次支持URI模板模式  RequestMapping(value/members/{id}, methodRequestMethod.GET)
public ResponseBody Member get(PathVariable Integer id){return this.memberDB.get(id);
} 这里的期望是如果一个请求的uri为/ members / 20则id参数将被绑定为20值但是由于在运行时不保留参数名id因此类似在前一种情况下要么在调试时编译要么在PathVariable批注中明确提及期望的模式名称  RequestMapping(value/members/{id}, methodRequestMethod.GET)
public ResponseBody Member get(PathVariable(id) Integer id){ 3.第三个示例是Spring中具有Cacheable批注的缓存支持。 考虑一个用Cacheable注释的示例方法  Cacheable(valuedefault, key#param1.concat(-).concat(#param2))
public String cachedMethod(String param1, String param2){return   new Random().nextInt();
} 这里的键是一个Spring-EL表达式它指示键生成器通过将名称param1的第一个参数的自变量与名称为param2的第二个参数的自相结合来生成密钥。 但是像以前一样的问题是这些名称在运行时不可用。   与以前一样修复程序之一是在调试符号打开的情况下进行编译。 第二种解决方法是使用占位符代替参数索引– a0 OR p0代表第一个参数a1 OR p1代表第二个参数依此类推这样Cacheable键将如下所示  Cacheable(valuedefault, key#p0.concat(-).concat(#p1))
public String cachedMethod(String param1, String param2){return   new Random().nextInt();
} 因此总而言之使用依赖于方法参数名称的Spring功能的一种安全方法是使用debug onjavac的-g或-gvar选项或通过显式传递表示参数名称的元信息来进行编译。运行。   参考 all和其他博客中来自我们JCG合作伙伴 Biju Kunjummen的方法参数名称和Spring 。  翻译自: https://www.javacodegeeks.com/2012/11/method-parameter-names-and-spring.html