今天一个大意的疏忽致使公司中断服务俩个小时。只能说学spring太囫囵吞枣。横跨了俩个版本后的spring,充分给了你自由,因而就想固然的被不起眼的bug战胜。如今回想起来。看网上资料学spring时,都在说 java
1.直接写@RequestParam就好了,会把请求中同名参数绑定到方法上。 spring
2.若是参数名和变量名不一致,能够使用@RequestParam(name),告诉spring,使用指定名字入参。 服务器
这种讲法明明是错误的。只有在debug模式编译时,参数名才会保留在class文件中,spring由此能够反射绑定。咱们的应用明显不可能在debug模式下打包。所以第一种误人子弟啊,老师告诉你很简单的默认值作法是错误的,第二种方式才是正确的写法。 eclipse
看一个简单的方法。 spa
经过http://localhost:8080/test/hello?name=a调用,本机一切OK。但到服务器,死活报错误。缘由是本机eclipse有个编译开关,会把变量写入到class文件中。所以须要明确告诉Spring入参。 debug
右击项目,选择“属性”,打开“属性对话框”,选择“Java Compiler”而后再打开的选项卡将“Add variable attributes to generated class files”取消勾选,意思是不将局部变量信息添加到类文件中 code
Request processing failed; nested exception is java.lang.IllegalArgumentException: Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
orm
public String hello( @RequestParam("name") String name){ return name; }