@RequestBody和RequestParam的区别

一、不使用@RequestBody,每一个属性对应一个参数,参数在请求的url中,利用Swagger测试的时候,传递几个参数,几个参数就会跟在url后面html

@RequestMapping("insert")
 public String insert(Ge06DTO ge06DTO){
     return ge06Service.save(ge06DTO);
}

二、使用@RequestBody,一个实体对应一个参数,参数不在请求的URL中json

@RequestMapping("insert")
public String insert(@RequestBody Ge06DTO ge06DTO){
    return ge06Service.save(ge06DTO);
}

三、@RequestBodyapp

做用:(1)、该注解读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,而后把相应的数据绑定到要返回的对象上;测试

原理:处理HttpEntity传递过来的数据,通常用来处理非Content-Type:application/x-www-form-urlencoded编码格式编码

a、GET请i去中,由于没有HttpEntity,因此@RequestBody并不适用。url

b、POST请求中,经过HttpEntity传递的参数,必需要在请求头中声明数据的类型ContentType,SpringMVHandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,而后绑定到相应的bean.net

(2)、再把HttpMessageConvert返回的对象绑定到controller中的方法的参数上。code

ResponseBodyorm

做用:该注解用于将Controller的方法返回的对象,经过适当的HttpMessageConverter转换为指定的格式后,写入到Response对象的body数据区。xml

使用时机:返回的数据不是html标签的页面,二十其余某种格式的数据时(如json、xml等)使用

参考:

https://blog.csdn.net/walkerJong/article/details/7520896   @RequestBody, @ResponseBody 

总结:

一、在GET请求中,不能使用@RequestBody.

二、在POST请求,可使用@Request和RequestParam,可是若是使用@RequstBody,对于参数转化的配置必须统一,

例如:在SpringMVC配置了HttpMessageConverters处理栈中,指定json转化的格式,如Date转成‘yyyy-MM-dd’,则参数类型接受对象包含的字段若是是Date类型,就只能让客户端传递年月日的额格式,不能传递时分秒。由于不一样的接口,他的参数可能对时间参数有不一样的格式要求,扩展行不高。

若是使用@RequestParam来接受参数,能够在接受参数的model中设置@DateFormat指定所须要的接受时间参数的格式。另外,使用@RequestBody接受的参数是不会被Servlet转化统一放在request对象的Param参数集中,而RequestParam是能够的。

相关文章
相关标签/搜索