在使用spring框架时,默认情况下@RequestParam注解只到接受Get和Post请求参数 ,而对于Put来说默认是使用@ReqeustBody注解的,如果希望为Put也开启@RequestParam,需要添加过滤器实现。

@RequestParam

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

RequestParam可以接受简单类型的属性,也可以接受对象类型。

实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

@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,对于参数转化的配置必须统一。
  • 在Put请求时,默认不支持application/x-www-form-urlencoded的方式提交

实现Put时的application/x-www-form-urlencoded提交

默认情况下会有错误

{"timestamp":1579144530724,"status":400,"error":"Bad Request","message":"Required String parameter 'name' is not present"}

添加PutFilter

@Component
@WebFilter(urlPatterns = "/*")
public class PutFilter extends HttpPutFormContentFilter { }

从新启动项目,PutFilter bean就被加载了

2020-01-16 11:13:37,358 - Mapping filter: 'tracingFilter' to: [/*]
2020-01-16 11:13:37,358 - Mapping filter: 'exceptionLoggingFilter' to: [/*]
2020-01-16 11:13:37,358 - Mapping filter: 'httpTraceFilter' to: [/*]
2020-01-16 11:13:37,358 - Mapping filter: 'webStatFilter' to urls: [/*]
2020-01-16 11:13:37,358 - Mapping filter: 'putFilter' to: [/*]
2020-01-16 11:13:37,358 - Mapping filter: 'corsFilter' to: [/*]

这时,你的Put请求就支持application/x-www-form-urlencoded提交了,就是来在后台可以用@RequestParam注解来接收了!

最新文章

  1. 海外建VPS并支持VPN
  2. web应用安全防御100技 好书再次阅读, 变的只是表象,被概念迷惑的时候还是静下心来回顾本质
  3. mac系统xcode升级等软件更换appid账户
  4. Asp.net MVC在View里动态捆绑压缩引用的js
  5. android:installLocation简析
  6. [转]Best way to sort a DropDownList in MVC3 / Razor using helper method
  7. 【转】数据库分页Java实现
  8. jQuery地图热点效应-后在弹出的提示鼠标层信息
  9. JavaScript预处理
  10. jQuery源码解析资源便签
  11. CSS常用属性-xy
  12. magento 1.9 上传后图片前后台无法正常显示
  13. <转>房租分配问题
  14. 截取URL的某个参数值
  15. 【代码笔记】iOS-mp3的播放
  16. DOM-访问元素
  17. Loadrunner 怎么将response的数据下载下来
  18. LUA表的引用理解
  19. 用ext_skel,实现一个PHP扩展,添加到PHP并调用
  20. FFM

热门文章

  1. 对于Python中的字节串bytes和字符串以及转义字符的新的认识
  2. halfcheetch win10
  3. nginx文件压缩
  4. STM8 关闭PWM输出后的电平输出问题解决
  5. jenkins 与 gitlab 的持续集成
  6. Zabbix3.4搭建过程
  7. 基于Arduino开发的简易“高水位报警系统解决方案”
  8. 如何快速搭建一个 Node.JS 项目并进入开发?
  9. python day02练习和作业
  10. css-position:absolute, relative 的用法