@RequestParam vs @PathVariable
Qual è la differenza tra @RequestParam
e @PathVariable
nella gestione dei caratteri speciali?
+
è stato accettato da @RequestParam
come spazio.
Nel caso di @PathVariable
, +
è stato accettato come +
.
322
3
@PathVariable
è per ottenere qualche segnaposto dall'URI (Spring lo chiama un URI Template)@RequestParam
è per ottenere anche un parametro dall'URI - vedi Spring Reference Chapter 16.3.3.3 Binding request parameters to method parameters with @RequestParamSe l'URL
http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
ottiene le fatture per l'utente 1234 il 5 dicembre 2013, il metodo del controller sarebbe come:Inoltre, i parametri di richiesta possono essere opzionali, e a partire da Spring 4.3.3 le variabili di percorso possono anche essere opzionali. Attenzione però, questo potrebbe cambiare la gerarchia del percorso dell'URL e introdurre conflitti di mappatura della richiesta. Per esempio,
/user/invoices
fornirebbe le fatture per l'utentenull
o i dettagli su un utente con ID "invoices"?L'annotazione @RequestParam usata per accedere ai valori dei parametri della query dalla richiesta. Guardate il seguente URL di richiesta:
Nella richiesta dell'URL di cui sopra, i valori di param1 e param2 sono accessibili come segue:
Di seguito sono elencati i parametri supportati dall'annotazione @RequestParam:
@PathVariable
@PathVariable identifica il modello che è usato nell'URI per la richiesta in arrivo. Guardiamo il seguente URL di richiesta:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
La richiesta URL di cui sopra può essere scritta nel vostro Spring MVC come segue:
L'annotazione @PathVariable ha solo un valore di attributo per legare il modello URI della richiesta. È permesso usare l'annotazione multipla @PathVariable nel singolo metodo. Ma, assicuratevi che non più di un metodo abbia lo stesso modello.
C'è anche un'altra annotazione interessante: @MatrixVariable
E il metodo di controllo per esso
Ma è necessario abilitare:
può essere che il tipo midia application/x-www-form-urlencoded converta lo spazio in +, e il ricevitore decodifica i dati convertendo il + in spazio.controllare l'url per maggiori informazioni.http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1