SpringMVC(3)——@PathVariable&@RequestBody

来源:互联网 发布:macbook装windows教程 编辑:程序博客网 时间:2024/04/30 21:48


背景:今天来分享一下@PathVariable&@RequestBody~~~


一、@PathVariable


作用:

    映射URL绑定的占位符

    带占位符的URL时Spring3.0新增的功能,该功能再SpringMVC向REST 目标挺进发展过程中具有里程碑的意义。

    通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL中的{xxx}占位符可以通过@Path Variable("xxx")绑定道操作方法的入参中。


例子:

SpringMVCTest.java



index.jsp



二、@RequestBody


作用: 
    i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
    ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。


使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
    application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
    multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
    其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);


B) PUT方式提交时, 根据request header Content-Type的值来判断:
    application/x-www-form-urlencoded, 必须;
    multipart/form-data, 不能处理;
    其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;



例子:

1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

2、通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
例如说以下情况:

 $.ajax({        url:"/login",        type:"POST",        data:'{"userName":"admin","pwd","admin123"}',        content-type:"application/json charset=utf-8",        success:function(data){          alert("request success ! ");        }    });
  

 @requestMapping("/login")    public void login(@requestBody String userName,@requestBody String pwd){      System.out.println(userName+" :"+pwd);    }

   
  这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:
  String userName;
  String pwd;
  那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上
  需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。


 3、在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式
    不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在
  特殊情况下才会使用,
  例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式。


三、何为REST?


即Representational StateTransfer 。(资源)表现层状态转化。

(今天先分享到这里了~~~)





阅读全文
0 0