一、@RequestParam
顾名思义:获取参数,即获取传送过来的参数。例如获取下面链接的id参数值:
//链接(注意链接格式区别)
http://localhost:8080/hello?id=6
//使用@RequestParam注解获取id
public String getParam(@RequestParam String id){
System.out.println("链接中请求参数的id:"+id);
return null;
}
此时 @RequestParam 的作用就可以获取 id 下来并且作为形参传给方法体里面的 id。
@RequestParam用于Controller层,是Spring的注解。
解决前台参数名称与后台接收参数变量名称不一致的问题,等价于request.getParam。具体参数:
1️⃣value:参数名字,即入参的请求参数名字,如 username 表示请求的参数区中的 name 为 username 的参数的值将传入;
2️⃣required:是否必须,默认是 true,表示请求中一定要有相应的参数,否则将报404错误码;
3️⃣defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SPEL表达式,如“#{systemProperties[‘java.vm.version’]}”。
@ResponseBody
@RequestMapping("login")
public String login(
@RequestParam(value = "username") final String username,
@RequestParam(value = "password",required = false) final String password,
@RequestParam(value = "valcode",required = false) final String valcode) {
}
二、@PathVariable
顾名思义:路径变量,即获取链接路径上的变量。例如获取下面链接的id:
//链接(注意比较上面一条链接)
http://localhost:8090/hello/6
//使用@PathVariable注解获取id
@RequestMapping(value = "/getBook/{id}", method = RequestMethod.GET)
public String getVariable(@PathVariable Integer id) {
try {
system.out.println("路径上的id:"+id);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
此时@PathVariable的作用是将路径上的id获取进来传递给方法体里面的形参id,但是变量名称必须一样。比如这里:value = "/getBook/{id}"
和@PathVariable Integer id
;两个都必须是一样的,即都为id
,否则报错;
三、@RequestBody
@RequestBody注解一般主要是用来处理content-type:"application/json charset=utf-8"
或者content-type:"application/xml charset=utf-8"
两种请求数据,一般是异步请求用的比较多些,例如:
//异步请求部分代码
$.ajax({
url:"/hello",
type:"POST",
data:'{"id":"123","name":"chenyc"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert(data);
}
});
//@RequestBody注解获取数据代码
@RequestMapping("/hello")
public String hello(@RequestBody Integer id,@RequestBody String name){
System.out.println("id:"+id+";"+"name:"+name);
}
此时@RequestBody注解就可以获取到请求中的各个参数,然后赋值到相对应的方法形参上。另外,当有一个实体类User包含了id和name的元素的话,在方法里面直接可以写@RequestBody User user
就会自动封装好供使用了,不用麻烦像这样@RequestBody Integer id,@RequestBody String name
一个一个的封装。
四、@Param
用于dao层,是MyBatis中的注解。使得mapper.xml中的参数与后台的参数对应上,也增强了可读性。
如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。即:用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 。
public interface Mapper {
@Select("select id,name,classId"+
"from table where name= #{aaa} and classId = #{bbb}")
public Table select(@Param("aaa") String name,@Param("bbb")int classId);
@Delete......
@Insert......
}
在dao层,用来给参数命名,在MyBatis的mapper中加上该注解,传递的参数与Sql中的字段名一致:
List<Book> getAllBookByPage(@Param("page") Integer page,@Param("size") Integer size);
五、附
handler method 参数绑定常用的注解,根据处理的Request的不同内容部分分为四类:(主要讲解常用类型)
- 处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解: @PathVariable;
- 处理request header部分的注解: @RequestHeader, @CookieValue;
- 处理request body部分的注解:@RequestParam, @RequestBody;
- 处理attribute类型是注解: @SessionAttributes, @ModelAttribute。