@RequestBody 415

来源:互联网 发布:realtek pxe 网络唤醒 编辑:程序博客网 时间:2024/06/06 09:56

3、@RequestParam, @RequestBody

@RequestParam 

A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

示例代码:

[java] view plaincopy
  1. @Controller  
  2. @RequestMapping("/pets")  
  3. @SessionAttributes("pet")  
  4. public class EditPetForm {  
  5.   
  6.     // ...  
  7.   
  8.     @RequestMapping(method = RequestMethod.GET)  
  9.     public String setupForm(@RequestParam("petId"int petId, ModelMap model) {  
  10.         Pet pet = this.clinic.loadPet(petId);  
  11.         model.addAttribute("pet", pet);  
  12.         return "petForm";  
  13.     }  
  14.   
  15.     // ...  


@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;

示例代码:

[java] view plaincopy
  1. @RequestMapping(value = "/something", method = RequestMethod.PUT)  
  2. public void handle(@RequestBody String body, Writer writer) throws IOException {  
  3.   writer.write(body);  
  4. }  
0 0
原创粉丝点击