RequestMethod.DELETE不接受RequestBody

时间:2016-12-18 02:57:46

标签: java ajax spring rest tomcat8

我正在使用tomcat v8并试图通过RequestBody将对象发布到我的REST API。此REST API基本上是RequestMethod.DELETE,因为此API中的逻辑是删除RequestBody中传递的对象。

这对我没有用。我不得不稍后将我的方法转换为POST,但我仍然想知道DELETE是否不接受RequestBody?

这是Spring框架或REST原则的限制,还是与我的Tomcat配置(server.xml)文件有关。

2 个答案:

答案 0 :(得分:1)

  

但我仍然想知道DELETE不接受RequestBody吗?

这是预期的行为。 HTTP 1.1规范的RFC 7231版本声明:

  

DELETE请求消息中的有效负载没有定义的语义;在DELETE请求上发送有效负载主体可能会导致某些现有实现拒绝该请求。

在这种情况下,您似乎在Tomcat中遇到了默认限制。 (根据HTTP规范,这是完全合法的行为。)

您可以覆盖默认行为:请参阅其他答案。但是,对于允许或要求请求正文的DELETE动词,它可能是糟糕的API设计。当然这是违反直觉的。

答案 1 :(得分:0)

  

这是Spring框架或REST原则的限制吗?   或者与我的Tomcat配置(server.xml)文件有关的事情

是的,您与Tomcat配置有关。

您必须在server.xml中启用解析DELETE方法(PUT相同),如下所示:

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               parseBodyMethods="POST,PUT,DELETE"
               redirectPort="8443" />
相关问题