@RequestBody和@RequestParam区别

news/2024/7/1 6:31:57

转载自(http://blog.csdn.net/xinluke/article/details/52710706)

@RequestParam

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

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

tip

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

 

@RequestBody

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

  • GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
  • POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

总结

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

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

如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。

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

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

转载于:https://www.cnblogs.com/chenkeyu/p/8482440.html


http://lihuaxi.xjx100.cn/news/238824.html

相关文章

入职后发现公司是外包全职_我如何通过全职工作,伴侣和3岁的双胞胎男孩打造产品...

入职后发现公司是外包全职by Courtney通过考特尼 我如何通过全职工作,伴侣和3岁的双胞胎男孩打造产品 (How I built my product with a full-time job, partner and 3 year old twin boys) If you’ve opened this article then I’ll assume that you’re either …

一个装作异步的代码段

// 获取当前周期 getCurrentCycle(subDepartmentIdthis.props.subDepartmentId) {let { dispatch } this.propscalculateApi.currentKaoqinCycle({id:subDepartmentId}).then(res>{ if (res.data.id) { //console.log(res.data.name); this.setState({ cycleName: res.data…

区块链中的HASH算法

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!! 区块链笔记-Hash算法 区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的地…

memcached部署

第1章 memcached 1 memcached前言 1.1 memcached诞生的原因 2003年诞生了memcached Web1.0 2005以前 企业提供内容为主。 Web2.02005-2012 企业只提供平台,用户参与上传下载内容。 memcached 内存缓存软件,内存比磁盘快。 传统场景中,多数…

如何从JavaScript中的给定数字中形成最小的数字

by Prashant Yadav通过Prashant Yadav 如何从JavaScript中的给定数字中形成最小的数字 (How to form the smallest possible number from a given number in JavaScript) In this tutorial, we will implement an algorithm to form the smallest possible number with ES6.在…

ansible组件-playbook学习笔记

playbook的基础组件 name 定义playbook或者task的名称 hosts 用于指定要执行指定任务的主机 user 用于指定远程主机上的执行任务的用户 task 任务列表 vars 定义变量 vars_files 定义变量文件 notify 任务执行结果如果是发生更改的则触发定义在handler的任务 handlers 用于当前…

2018湖湘杯海选复赛Writeup

2018湖湘杯Writeup0x01 签到题0x02 MISC Flow0x03 WEB Code Check0x04 WEB Readflag0x05 WEB XmeO0x06 Reverse Replace0x07 MISC Disk0x08 Crypto Common Crypto0x09 Reverse HighwayHash640x10 Web Mynot0x01 签到题 关注合天智汇公众号,回复hxb2018得到flag。0x…

区块链技术简介

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!!我最近看区块链简单介绍的时候会发现有的人就说其有良好的隐私性,但也有人说保护隐私性上有缺陷,今天就简单的对区块链的隐私做…