簡體   English   中英

Spring Web MVC:HTTP DELETE不再有請求體

[英]Spring Web MVC: no request body possible for HTTP DELETE anymore

我對Spring Web MVC的開發人員提出了一個問題。

簡而言之:之前可以在HTTP DELETE消息中發送請求正文,但現在又不可能了。 為什么?

詳細:

我們使用的是spring-webmvc-4.2.4.RELEASE

@RestController
public class Controller {

    @RequestMapping(value = "/{pathVariable}/deleteAnything", method = RequestMethod.DELETE)
    public ResponseEntity<?> deleteAnything(@PathVariable String pathVariable,
        @Valid @RequestBody Set<Pojo> pojoSet) {
        ...

我們發送

DELETE /anything/deleteAnything HTTP/1.1
Content-Type: application/json
Host: example.com

[ {
  "any field" : "Any value"
} ]

並得到例外

m.m.a.RequestResponseBodyMethodProcessor : Read [java.util.Set<packagename.Pojo>] as "application/json;charset=UTF-8" with [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@333825a3]
.w.s.m.m.a.ServletInvocableHandlerMethod : Error resolving argument [1] [type=java.util.Set]
HandlerMethod details: 
Controller [packagename.Controller]
Method [public org.springframework.http.ResponseEntity<?> packagename.Controller.deleteAnything(java.lang.String,java.util.Set<packagename.Pojo>)]


org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntity<?> packagename.Controller.deleteAnything(java.lang.String,java.util.Set<packagename.Pojo>)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:151)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:125)
    ...

似乎請求正文已被刪除。

如果我們在任何地方使用HTTP POST而不是HTTP DELETE,它可以正常工作。

以前它工作正常(抱歉我之前無法指定,因為我們的依賴項非常復雜。如果它對您有幫助,我可以發布一個舊的build.gradle )。

為什么不再可能了?

您可能應該重新設計API,因為忽略DELETE請求中的有效負載。

來自http://tools.ietf.org/html/rfc7231#section-4.3.5

DELETE請求消息中的有效負載沒有定義的語義。

來自https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3

如果請求方法不包含實體主體的定義語義,則在處理請求時應該忽略消息主體。

這似乎與zuul有關。 沒有zuul它的工作原理。 Spring與它無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM