2016-12-18 85 views
0

我正在使用tomcat v8並試圖通過RequestBody將對象發佈到我的REST API。此REST API基本上是RequestMethod.DELETE,因爲此API中的邏輯是刪除在RequestBody中傳遞的對象。RequestBody不接受RequestMethod.DELETE

這不適合我。我不得不稍後將我的方法轉換爲POST,但我仍然想知道DELETE不接受RequestBody嗎?

這是來自Spring框架或REST原理還是與我的Tomcat配置(server.xml)文件有關的限制。

回答

0

這是從Spring框架或REST原則 什麼限制我的Tomcat配置(server.xml中)做文件

是的,你有話跟你的Tomcat配置。

您必須啓用解析DELETE在server.xml中的方法(同樣適用於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" /> 
1

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

這是預期的行爲。 HTTP 1.1規範的RFC 7231版本規定:

DELETE請求消息中的有效載荷沒有定義的語義;發送DELETE請求上的有效內容主體可能會導致一些現有的實現拒絕請求。

在這種情況下,您似乎在Tomcat中遇到了默認限制。 (根據HTTP規範,這完全是合法的行爲。)

您可以覆蓋默認行爲:請參閱其他答案。然而,它讓我覺得糟糕的API設計 DELETE謂詞允許或需要一個請求主體。當然,這是違反直覺的。