Sto eseguendo un'applicazione Spring 3.1.2. Ho un servlet RESTful con un numero di metodi. I metodi GET funzionano in modo fantastico (corrispondenza @PathVariables
, risposte correttamente indirizzate a JSON o XML in base all'intestazione Accept, ecc.) Il 100% delle volte.Spring non accetta un parametro POST a meno che @RequestParam "required = false"
Tuttavia, il metodo POST semplicemente non funziona. Dopo ore passate a fare confusione con i convertiti e ogni altro aspetto di Spring che potevo trovare (tutti i ritocchi ripristinati), l'ho ristretto al campo required
in @RequestParam
. Si tratta di un metodo di prova semplificato ho usato per indagare:
@RequestMapping (value = "/bogus",
method = POST)
public @ResponseBody PassResponse bogus (
@RequestParam (value = "test", required = false) String test) {
// Just some handy garbage objects that marshal to JSON/XML
UserResponse user = new UserResponse();
user.setName (test);
AccountDetail detail = new AccountDetail (user,null);
return new PassResponse (detail);
}
richiesto = false: tutto funziona (parametro viene ricevuto e interpretato). Esattamente come mi aspetto di lavorare
richiesto = true: (o non specificato, dal momento che questo è il default) ho sempre il messaggio "MissingServletRequestParameterException: String Richiesto parametro 'test' non è presente"
Cliente vista laterale:
richiesto = true
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:400 Bad Request
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Connection:close
Content-Length:971
Content-Type:text/html;charset=utf-8
Date:Wed, 24 Oct 2012 18:41:05 GMT
Server:Apache-Coyote/1.1
richiesto = false
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Content-Type:application/json;charset=UTF-8
Date:Wed, 24 Oct 2012 18:44:03 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
E 'esattamente la stessa suite di test in esecuzione quando la commutazione required
e posso vedere il parametro viene passato. Quando il parametro è opzionale, Spring lo gestisce correttamente.
Se qualcuno lo ha incontrato prima o ha qualche idea mi piacerebbe sentirli. Contrassegnare il parametro richiesto come facoltativo, anche se funziona, è una terribile autodistruzione anche se la commento. Inoltre, il comportamento mi rende un po 'nervoso. Spero di aver rovinato qualcosa da qualche parte ...
Sei corretto! L'impostazione del 'Content-Type' come suggerito ha in effetti normalizzato il comportamento della mappatura. Non so perché il campo 'required' ha attivato il comportamento divergente quando non sono riuscito a impostarlo, ma è un problema minore. Grazie per il tuo tempo! – node42