在DELETE请求的主体中传递数据

亚历克斯

我有两种Spring MVC控制器方法。两者都接收请求体中相同的数据(在HTLM的格式POST形式:version=3&name=product1&id=2),但一个方法手柄PUT请求和另一DELETE

@RequestMapping(value = "ajax/products/{id}", method = RequestMethod.PUT)
@ResponseBody
public MyResponse updateProduct(Product product, @PathVariable("id") int productId) {

//...
}

@RequestMapping(value = "ajax/products/{id}", method = RequestMethod.DELETE)
@ResponseBody
public MyResponse updateProduct(Product product, @PathVariable("id") int productId) {

//...
}

在第一种方法中,product参数的所有字段均已正确初始化。在第二个中,仅id字段被初始化。其他字段是null或0。(id可能由于idpath变量而被初始化)。

我可以看到该HttpServletRequest对象包含请求正文(version=3&name=product1&id=2)中所有字段的值它们只是没有映射到product参数的字段

如何使第二种方法起作用?

我也尝试使用带@RequestParam注释的参数。在处理PUT请求的方法中,它可以工作。在该DELETE方法中,我得到一个例外:org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'version' is not present

我需要在DELETE请求正文中传递数据,因为数据包含用于乐观锁定的行版本。

Geoand

问题不是Spring问题,而是Tomcat问题。

默认情况下,当HTTP方法为POST(至少对于我检查过的7.0.54版本,但对于所有Tomcat 7版本而言,它都是相同的)时,Tomcat仅会解析具有表单样式的参数

为了能够处理DELETE方法,您需要设置parseBodyMethodsTomcat连接器属性。连接器配置在中完成server.xml

更新后的连接器很可能看起来像:

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000"
           redirectPort="8443"
           parseBodyMethods="POST,PUT,DELETE"
           URIEncoding="UTF-8" />

是用于配置Tomcat连接器的文档页面。

一旦设置了Tomcat来解析参数,Spring就可以正常工作(尽管在这种情况下,您可能需要@RequestBody从controller方法中删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spring中,是否存在将带有DELETE请求的主体传递给REST端点的标准方法?

Angular2中的Http.DELETE请求主体

在POST请求主体Play框架中获取数据

在groovy中的发布请求中需要将变量值传递给json主体-Jenkins

使用python在请求中传递数据

带有JSON主体的POST请求不会传递到springboot微服务架构中的端点

在Android中传递请求方法主体时不接受arraylist值

如何在同一请求中传递主体@RequestBody和@RequestParam

将请求主体转换为C#中的数据表或数据集

如果jmeter中有HTTP请求,则在请求URL和主体中传递自动递增变量

未在axios请求中发送主体数据

将请求主体写入数据存储区

Alamofire使用数据设置请求主体

如何在预请求或数据文件的json主体中添加元素?

如何将原始数据主体添加到axios请求中?

矩形| CustomPOST:我无法通过主体中的json数据对象发出CORS POST请求

如何从 GET 请求中获取 JSON 数据(主体应用程序/json)?

Groovy中如何在HttpBuilder请求主体中发送XML数据

如何使用HttpPlugin ionic2在主体中传递XML数据

如何在Postman中的POST请求中传递数据数组?

CSV中的JMeter主体数据

在Python中解析嵌套的urlencode请求主体

ReverseProxy取决于请求.golang中的主体

替换NGINX代理中的POST请求主体

在Go中从HTTP请求的主体读取图像

访问策略中的请求主体的最佳方法

在变量中返回请求函数的主体

在Grape API中检查请求主体

API请求中的单引号主体