我正在使用tomcat v8并试图通过RequestBody将对象发布到我的REST API。此REST API基本上是RequestMethod.DELETE,因为此API中的逻辑是删除RequestBody中传递的对象。
这对我没有用。我不得不稍后将我的方法转换为POST,但我仍然想知道DELETE是否不接受RequestBody?
这是Spring框架或REST原则的限制,还是与我的Tomcat配置(server.xml)文件有关。
答案 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" />