方法参数名称和Spring

继续之前的博客文章有关构造函数和方法参数以及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}', method=RequestMethod.GET)
public @ResponseBody Member get(@PathVariable Integer id){return this.memberDB.get(id);
}

这里的期望是,如果一个请求的uri为/ members / 20,则id参数将被绑定为20值,但是由于在运行时不保留参数名'id',因此类似在前一种情况下,要么在调试时编译,要么在@PathVariable批注中明确提及期望的模式名称:

@RequestMapping(value='/members/{id}', method=RequestMethod.GET)
public @ResponseBody Member get(@PathVariable('id') Integer id){

3.第三个示例是Spring中具有@Cacheable批注的缓存支持。 考虑一个用@Cacheable注释的示例方法:

@Cacheable(value='default', 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(value='default', key='#p0.concat('-').concat(#p1)')
public String cachedMethod(String param1, String param2){return '' + new Random().nextInt();
}

因此,总而言之,使用依赖于方法参数名称的Spring功能的一种安全方法是使用debug on(javac的-g或-g:var选项)或通过显式传递表示参数名称的元信息来进行编译。运行。

参考: all和其他博客中来自我们JCG合作伙伴 Biju Kunjummen的方法参数名称和Spring 。

翻译自: https://www.javacodegeeks.com/2012/11/method-parameter-names-and-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fragment Or DialogFragment Can not perform this action after onSaveInstanceState

转载:http://blog.csdn.net/chenshufei2/article/details/48747149 public void show(FragmentManager manager, String tag) {mDismissed false;mShownByMe true;FragmentTransaction ft manager.beginTransaction();ft.add(this, tag);ft.commit(); //注意这里…

php延迟更新,ThinkPHP开发指南-模型-高级模型之延迟更新

导航:上一页我们经常需要给某些数据表添加一些需要经常更新的统计字段,例如用户的积分、文件的下载次数等等,而当这些数据更新的频率比较频繁的时候,数据库的压力也随之增大不少,我们可以利用高级模型的延迟更新功能缓…

three.js制作3d模型工具_3D打印模型打磨抛光常用工具

对于追求更好模型品质的人来说,对3D打印模型进行后处理工作是必不可少的,而后处理,首要的便是对模型进行打磨、抛光,将不属于模型的耗材去除,提高表面光洁度。在此工作中,我们需要用到很多工具,…

Linux中文档去掉windows文本的多余的回车符(^M)

1) 使用sed 去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRLv,松开v,按m)sed -i s/^M//g filename 2) 在vim下类似 :%s/^M//g (^M输入方法和上面方法相同) 3) 使用dos2unix dos2unix filename 个人觉得第…

为何要清除浮动?如何清除?

原因: 元素设置了float属性后,就会脱离文档流,当 包含框 的高度小于 浮动框 的时候,会出现高度塌陷。因此才需要清除浮动! 表现如图:包括框container已经包不住float的图片了! 清除浮动方法&a…

Spring MVC错误处理示例

这篇文章描述了在Spring MVC 3中执行错误处理的不同技术。该代码在GitHub上的Spring-MVC-Error-Handling目录中可用。 它基于带有注释的Spring MVC示例。 在Spring 3之前处理异常 在Spring 3之前,使用HandlerExceptionResolvers处理异常。 此接口定义一个方法&…

PLSQL 学习之路(1)创建用户,表空间,表,数据

1.用SYS用户登录PL/SQL SYSXE as SYSDBA 2.创建表空间 create tablespace Mars datafile F:\oracle\Mars.dbf size 500M autoextend on next 100M maxsize unlimited logging extent management local autoallocate segment space management auto; 3.创建用户 create user Mar…

php数字取反,[转+自]关于PHP7的新特性(涉及取反和disabled_functions绕过)

PHP7和PHP5上的安全区别preg_replace()不再支持/e修饰符利用\e修饰符执行代码的后门大家也用了不少了,具体看官方的这段描述:如果设置了这个被弃用的修饰符, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估…

如何关闭苹果手机自动扣费_教你关闭苹果手机系统的自动更新功能,旧手机还能再用几年!...

大家都知道,苹果手机在更新几个大版本后,手机不是变得非常卡,就是非常的耗电,大大的缩短了手机的使用寿命。所以,许多人都不会选择更新系统,但是手机只要连上WiFi并且在充电状态,就会在半夜自动…

meta标签的常见用法

一、定义和用法 <meta> 标签始终位于 head 元素中。<meta> 元素可提供有关页面的元信息&#xff08;meta-information&#xff09;&#xff0c;元数据不会显示在页面上&#xff0c;但是对于机器是可读的。比如针对搜索引擎和更新频度的描述和关键词。 元数据&…

HttpClient的使用

新引入Hutool-HttpUtil的使用&#xff08;更简单&#xff0c;更强大&#xff01;&#xff09;&#xff0c;详见&#xff1a;http://www.cnblogs.com/jiangbei/p/7667858.html 一、概述 1.简介 根据凡技术必登其官网的原则&#xff08;如果有&#xff09;&#xff0c;我们可以先…

四人帮–代理设计模式

代理是另一种结构设计模式 &#xff0c;可以“代表”另一个对象或“代替”另一个对象以访问后面的对象。 何时使用此模式&#xff1f; 当我们需要创建一个包装来覆盖客户端的主要对象的复杂性时&#xff0c;将使用代理模式。 有哪些使用场景&#xff1f; 虚拟代理–设想一种…

面试题38_数字在排序数组中出现的次数

题目描写叙述 统计一个数字在排序数组中出现的次数。解题思路 数组是排序的&#xff0c;所以反复出现的数字是相邻排列的。 用二分查找算法&#xff0c;找到第一次出现的位置。和 最后一次出现的位置。 推断第一次出现的位置条件为&#xff1a;当前数字的前一个是否与之相等。若…

Hex hsl 转换 php,关于 RGB,HEX,HSL 颜色相互转换

最近一段时间在折腾一个微信在线编辑器的项目&#xff0c;使用 UEditor 进行二次开发。关于 UEditor 的定制&#xff0c;用到的都太粗浅&#xff0c;官方文档上都能找得到。主题使用的样式表是 ueditor.css 而不是ueditor.min.css&#xff0c;定制主题要注意这一点。而对整个项…

使用inetaddress测试目标可达性_PDPS软件机器人虚拟仿真:Smart Place功能介绍与使用方法...

概述对于机器人工作站或生产线的虚拟仿真&#xff0c;很大一部分的作用是找出机器人与工装夹具等外围设备的最佳布局位置。市面上大多数的工业机器人虚拟仿真软件都有这种专门用于检测机器人与外围设备之间最佳布局位置的功能&#xff0c;比如DELMIA软件中的“Auto Place”功能…

JAVA基础3——常见关键字解读(1)

常见的JAVA中的关键字 static static静态变量 静态变量&#xff1a;使用static关键字定义的变量。static可以修饰变量和方法&#xff0c;也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&#xff0c;被…

PostgreSQL PL / java简介

现代数据库允许以多种语言编写存储过程。 一种常见的实现语言是java.NB&#xff0c;本文讨论了PostgreSQL特定的Java实现。 其他数据库的详细信息会有所不同&#xff0c;但是概念是相同的。 PL / Java的安装 在Ubuntu系统上安装PL / Java很简单。 我将首先创建一个新模板templ…

强连通分量 圆桌骑士

题目描述 圆桌骑士是一个非常吸引人的职业。因此&#xff0c;在最近几年里&#xff0c;亚瑟王史无前例的扩招圆桌骑士&#xff0c;并不令人惊讶。现在这里有许多圆桌骑士&#xff0c;每个圆桌骑士都收到一份珍贵的邀请函&#xff0c;被邀请去英灵殿圆桌。这些骑士将要环绕着坐在…

微信小程序echarts层级太高

项目中因为需求&#xff0c;底部的tab导航栏是自己写的&#xff0c;在开发者工具中一切正常&#xff1b;但是在真机上页面滑动时&#xff0c;echarts的层级比tab高&#xff0c;调过两者的z-index后仍然如此。 经过查找后发现cover-view和cover-image替换tab的view后&#xff0…

php解密 码表,php拼音码表的生成

php拼音码表的生成发布于 2014-09-07 11:12:52 | 90 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点&#xff0c;入门门槛…