聊聊@RequestParam,@PathParam,@PathVariable等注解
的区别
@RequestParam 和 @PathVariable 注解是⽤于从request中接收请求的,两个都可以接收参数,关键点不同的是
@RequestParam 是从request⾥⾯拿取值,⽽ @PathVariable 是从⼀个URI模板⾥⾯来填充
@RequestParam
看下⾯⼀段代码:
根据上⾯的这个URL,你可以⽤这样的⽅式来进⾏获取
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
@RequestParam ⽀持下⾯四种参数
defaultValue 如果本次请求没有携带这个参数,或者参数为空,那么就会启⽤默认值
name 绑定本次参数的名称,要跟URL上⾯的⼀样
required 这个参数是不是必须的
value 跟name⼀样的作⽤,是name属性的⼀个别名
@PathVariable
这个注解能够识别URL⾥⾯的⼀个模板,我们看下⾯的⼀个URL
上⾯的⼀个url你可以这样写:
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
区别很明显了
@PathParam
这个注解是和spring的pathVariable是⼀样的,也是基于模板的,但是这个是jboss包下⾯的⼀个实现,上⾯的是spring的⼀个实现,都要导包
@QueryParam
@QueryParam 是 JAX-RS 本来就提供的,和Spring的RequestParam作⽤⼀致
@ResponseBody
responseBody表⽰服务器返回的时候以⼀种什么样的⽅式进⾏返回,将内容或对象作为 HTTP 响应正⽂返回,值有很多,⼀般设定为json
@RequestBody
⼀般是post请求的时候才会使⽤这个请求,把参数丢在requestbody⾥⾯
补充:@pathvariable参数_SpringMVC 五种注解参数绑定
@pathvariable参数_SpringMVC 五种注解参数绑定
SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller⽅法的形参上,然后就可以在controller中使⽤该参数了
下⾯通过5个常⽤的注解演⽰下如何进⾏参数绑定:
1. @PathVariable注解
@PathVariable 是⽤来获得请求url中的动态参数的,可以将URL中的变量映射到功能处理⽅法的参数上,其中URL 中的 {xxx}占位符可以通过@PathVariable(“xxx“) 绑定到操作⽅法的⼊参中。
⽰例代码:
@ResponseBody
@RequestMapping("/testUrlPathParam/{param1}/{param2}")public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1, @PathVariable String param2) {
System.out.println("通过PathVariable获取的参数param1=" + param1);
System.out.println("通过PathVariable获取的参数param2=" + param2);
}
输出结果:
通过PathVariable获取的参数param1=1
通过PathVariable获取的参数param2=2
2.@RequestHeader注解
@RequestHeader 注解,可以把Request请求header部分的值绑定到⽅法的参数上。
⽰例代码:
@ResponseBody
@RequestMapping("/testHeaderParam")public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
System.out.println("通过RequestHeader获取的参数param1=" + param1);
}
输出结果:
通过RequestHeader获取的参数param1=abc
3.@CookieValue注解
@CookieValue 可以把Request header中关于cookie的值绑定到⽅法的参数上。
⽰例代码:
@ResponseBody
@RequestMapping("/testCookieParam")public void testCookieParam(HttpServletRequest request, HttpServletResponse response,session和application的区别
@CookieValue String sessionid) {
System.out.println("通过CookieValue获取的参数sessionid=" + sessionid);
}
输出结果:
通过CookieValue获取的参数sessionid=ebef978eef6c46f8a95cc0990d2d360a
4.@RequestParam注解
@RequestParam注解⽤来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交⽅式为get或post。(Http协议中,form的enctype属性为编码⽅式,常⽤有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded);
@RequestParam注解实质是将Parameter() 中的Key-Value参数Map利⽤Spring的转化机制ConversionService配置,转化成参数接收对象或字段,
get⽅式中queryString的值,和post⽅式中body data的值都会被Servlet接受到并转化到Parameter()参数集中,所以@RequestParam可以获取的到;
该注解有三个属性:value、required、defaultValue;value⽤来指定要传⼊值的id名称,required⽤来指⽰参数是否必
录,defaultValue表⽰参数不传时候的默认值。
⽰例代码:
@ResponseBody
@RequestMapping("/testRequestParam")public void testRequestParam(HttpServletRequest request,
@RequestParam(value = "num", required = true, defaultValue = "0") int num) {
System.out.println("通过RequestParam获取的参数num=" + num);
}
输出结果:
通过RequestParam获取的参数num=10
5.@RequestBody注解
@RequestBody注解⽤来处理HttpEntity(请求体)传递过来的数据,⼀般⽤来处理⾮Content-Type: application/x-www-form-urlencoded编码格式的数据;
GET请求中,因为没有HttpEntity,所以@RequestBody并不适⽤;
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使⽤HandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
⽰例代码:
@ResponseBody
@RequestMapping("/testRequestBody")public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr); }
代码运⾏结果:
通过RequestBody获取的参数bodyStr=这是body的内容
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论