聊聊@RequestParam,@PathParam,@PathVariable等注解的区别
@RequestParam和@PathVariable注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam是从request里面拿取值,而@PathVariable是从一个URI模板里面来填充
@RequestParam
看下面一段代码:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
根据上面的这个URL,你可以用这样的方式来进行获取
publicStringgetDetails( @RequestParam(value="param1",required=true)Stringparam1, @RequestParam(value="param2",required=false)Stringparam2){ ... }
@RequestParam支持下面四种参数
defaultValue如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
name绑定本次参数的名称,要跟URL上面的一样
required这个参数是不是必须的
value跟name一样的作用,是name属性的一个别名
@PathVariable
这个注解能够识别URL里面的一个模板,我们看下面的一个URL
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
上面的一个url你可以这样写:
@RequestMapping("/hello/{id}") publicStringgetDetails(@PathVariable(value="id")Stringid, @RequestParam(value="param1",required=true)Stringparam1, @RequestParam(value="param2",required=false)Stringparam2){ ....... }
区别很明显了
@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}")publicvoidtestUrlPathParam(HttpServletRequestrequest,@PathVariableStringparam1, @PathVariableStringparam2){ 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")publicvoidtestHeaderParam(HttpServletRequestrequest,@RequestHeaderStringparam1){ System.out.println("通过RequestHeader获取的参数param1="+param1); }
输出结果:
通过RequestHeader获取的参数param1=abc
3.@CookieValue注解
@CookieValue可以把Requestheader中关于cookie的值绑定到方法的参数上。
示例代码:
@ResponseBody @RequestMapping("/testCookieParam")publicvoidtestCookieParam(HttpServletRequestrequest,HttpServletResponseresponse, @CookieValueStringsessionid){ 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注解实质是将Request.getParameter()中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,
get方式中queryString的值,和post方式中bodydata的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;
该注解有三个属性:value、required、defaultValue;value用来指定要传入值的id名称,required用来指示参数是否必录,defaultValue表示参数不传时候的默认值。
示例代码:
@ResponseBody @RequestMapping("/testRequestParam")publicvoidtestRequestParam(HttpServletRequestrequest, @RequestParam(value="num",required=true,defaultValue="0")intnum){ 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")publicvoidtestRequestBody(HttpServletRequestrequest,@RequestBodyStringbodyStr){ System.out.println("通过RequestBody获取的参数bodyStr="+bodyStr);}
代码运行结果:
通过RequestBody获取的参数bodyStr=这是body的内容
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。