Ho una domanda per gli sviluppatori di Spring Web MVC.Spring Web MVC: nessun corpo richiesta possibile per HTTP DELETE più
In breve: in precedenza era possibile inviare un corpo di richiesta in un messaggio DELETE HTTP, ma ora non è più possibile. Perché?
In dettaglio:
Stiamo utilizzando 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) {
...
Inviamo
DELETE /anything/deleteAnything HTTP/1.1
Content-Type: application/json
Host: example.com
[ {
"any field" : "Any value"
} ]
e ottenere l'eccezione
m.m.a.RequestResponseBodyMethodProcessor : Read [java.util.Set<packagename.Pojo>] as "application/json;charset=UTF-8" with [org.springfr[email protected]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)
...
Sembra che il corpo della richiesta è stata rimossa.
Se utilizziamo HTTP POST anziché HTTP DELETE ovunque, funziona correttamente.
In precedenza ha funzionato bene (mi dispiace che non posso specificare precedentemente perché i nostri dipendenze sono molto complicate. Se si aiuta, posso pubblicare un vecchio build.gradle
).
Perché non è più possibile?
Quindi cosa hai cambiato, dal momento che ha funzionato? – Ralph
@ Ralph: non abbiamo cambiato nulla. Nel nostro 'build.gradle' abbiamo dipendenze come' compile 'org.springframework.security:spring-security-web:4.0. +' ', Quindi forse ogni dipendenza è stata aggiornata automaticamente da gradle. –
Come si invia la richiesta? – shazin