@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充
@RequestParam
看下面一段代码:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
根据上面的这个URL,你可以用这样的方式来进行获取
1
2
3
4
5
|
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
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
上面的一个url你可以这样写:
1
2
3
4
5
6
|
@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“) 绑定到操作方法的入参中。
示例代码:
1
2
3
4
5
6
|
@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部分的值绑定到方法的参数上。
示例代码:
1
2
3
4
|
@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的值绑定到方法的参数上。
示例代码:
1
2
3
4
5
|
@ResponseBody @RequestMapping ( "/testCookieParam" ) public void testCookieParam(HttpServletRequest request, HttpServletResponse response, @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注解实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,
get方式中queryString的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;
该注解有三个属性:value、required、defaultValue;value用来指定要传入值的id名称,required用来指示参数是否必录,defaultValue表示参数不传时候的默认值。
示例代码:
1
2
3
4
5
|
@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上。
示例代码:
1
2
3
|
@ResponseBody @RequestMapping ( "/testRequestBody" ) public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){ System.out.println( "通过RequestBody获取的参数bodyStr=" + bodyStr); } |
代码运行结果:
通过RequestBody获取的参数bodyStr=这是body的内容
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/u011410529/article/details/66974974