@RequestBody和@RequestParam区别

@RequestParamhtml

用来处理Content-Type: 为 application/x-www-form-urlencoded 编码的内容。(Http协议中,若是不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)json

RequestParam能够接受简单类型的属性,也能够接受对象类型 实质是将Request.getParameter()中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。app

tippost

在Content-Type: application/x-www-form-urlencoded的请求中, get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到 Request.getParameter()参数集中,因此@RequestParam能够获取的到。编码

@RequestBodyurl

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

  • Get请求中,由于没有HttpEntity,因此@RequestBody并不适用。
  • POST请求中,经过HttpEntity传递的参数,必需要在请求头中声明数据的类型Content-Type,SpringMVC经过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,而后绑定到相应的bean上。

总结orm

  • 在GET请求中,不能使用@RequestBody。
  • 在POST请求,能够使用@RequestBody和@RequestParam,可是若是使用@RequestBody,对于参数转化的配置必须统一。

举个例子,在SpringMVC配置了HttpMessageConverter处理栈中,指定json转化的格式,如Date转成'yyyy-MM-dd',则参数接收对象包含的字段若是是Date类型,就只能让客户端传递年月日的格式,不能传时分秒。由于不一样的接口,它的参数可能对时间参数有不一样的格式要求,因此这样作会让客户端调用同事对参数的格式有点困惑,因此说扩展性不高。htm

若是使用@RequestParam来接受参数,能够在接受参数的model中设置@DateFormat指定所须要接受时间参数的格式。对象

另外,使用@RequestBody接受的参数是不会被Servlet转化统一放在request对象的Param参数集中,@RequestParam是能够的。

综上所述,通常状况下,推荐使用@RequestParam注解来接受Http请求参数。

以上引用了:https://www.cnblogs.com/lxh520/p/8760664.html

相关文章
相关标签/搜索