java中@RequestParam和@Param的区别
@RequestParam:
@RequestParam是SpringMVC中的一个常用注解,这个注解通常用在Controller层使用,标注在Controller层方法的参数上,用来解决前端与后端参数不一致的问题。@RequestParam 将请求参数和控制器方法的形参创建映射关系。
该注解一共有三个属性:
(1)value:指定为方法形参赋值的请求参数的参数名
(2)required:设置是否必须传输此请求参数,默认值为true
若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter 'xxx' is not present;
若设置为 false时,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为 null
(3)defaultValue:为当前形参设置默认值,不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为 "" 时,则使用默认值为当前形参赋值
下面为required实例
例如下面接口:
如果请求url为http://127.0.0.1:9802/api/order/vr/testRequestParam
这样是可以被拦截下来的,因为请求参数中不存在param1这个参数
但是不能校验参数值是否为空.
比如:http://127.0.0.1:9802/api/order/vr/testRequestParam?param1
是可以请求成功的
如果想要拦截到参数为空的请求
还需要在参数中加 @Valid @NotBlank
例如:
@Param:
@Param是Mybatis中的一个常用注解,该注解标注在dao接口中的方法参数上,用来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数注入),@Param注解的作用是给参数命名,参数命名后就可以通过 #{xxx} 的形式注入sql语句中(xxx为@Param给参数设置的名称)。@Param注解是为了dao接口的方法参数和配置文件sql语句的参数保持变量名的一致性。
简单来说就是:该注解用在dao层,用来给参数命名,在Mybatis的mapper中加上该注解,传递的参数与Sql中的字段名需要一致。
例如:
dao接口中的方法:
public User selectUser(@Param("userName") String name,@Param("password") String pwd);
映射到xml中:
<select id="selectUser" resultMap="User">
select * from user where user_name = #{userName} and user_password=#{password}
</select>
就是说xml中用到的参数名是@param注解的名字,而不是方法的参数名.该注解就是有重命名的作用