Was ist der Unterschied zwischen @RequestParam
und @PathVariable
beim Umgang mit Sonderzeichen?
+
wurde von @RequestParam
als Raum akzeptiert .
Im Falle von @PathVariable
wurde +
als akzeptiert +
.
quelle
Was ist der Unterschied zwischen @RequestParam
und @PathVariable
beim Umgang mit Sonderzeichen?
+
wurde von @RequestParam
als Raum akzeptiert .
Im Falle von @PathVariable
wurde +
als akzeptiert +
.
@PathVariable
Um einen Platzhalter aus dem URI zu erhalten (Spring nennt ihn eine URI-Vorlage) - siehe Spring-Referenz Kapitel 16.3.2.2 URI-Vorlagenmuster@RequestParam
soll auch einen Parameter vom URI erhalten - siehe Spring Reference Kapitel 16.3.3.3 Binden von Anforderungsparametern an Methodenparameter mit @RequestParamWenn die URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
am 5. Dezember 2013 die Rechnungen für Benutzer 1234 erhält, sieht die Controller-Methode folgendermaßen aus:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Außerdem können Anforderungsparameter optional sein, und ab Spring 4.3.3 können auch Pfadvariablen optional sein . Beachten Sie jedoch, dass dies die URL-Pfadhierarchie ändern und Konflikte bei der Anforderungszuordnung verursachen kann. Würden Sie beispielsweise /user/invoices
die Rechnungen für den Benutzer null
oder Details zu einem Benutzer mit der ID "Rechnungen" bereitstellen ?
@PathVariable
kann in jeder RequestMethod@PathParam
funktioniert nur, wenn die Uri-Vorlage einen Platzhalter enthält)@PathParam
ist eine Annotation von javax.ws.rs. docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.html@ RequestParam- Annotation, die für den Zugriff auf die Abfrageparameterwerte aus der Anforderung verwendet wird. Sehen Sie sich die folgende Anforderungs-URL an:
In der obigen URL-Anfrage kann auf die Werte für param1 und param2 wie folgt zugegriffen werden:
Im Folgenden finden Sie eine Liste der Parameter, die von der Annotation @RequestParam unterstützt werden:
@ PathVariable
@ PathVariable identifiziert das Muster, das im URI für die eingehende Anforderung verwendet wird. Schauen wir uns die folgende Anforderungs-URL an:
Die obige URL-Anfrage kann wie folgt in Ihre Spring MVC geschrieben werden:
Die Annotation @ PathVariable enthält nur einen Attributwert zum Binden der Anforderungs-URI-Vorlage. Es ist erlaubt, das multiple @ zu verwenden Annotation PathVariable in der einzelnen Methode zu verwenden. Stellen Sie jedoch sicher, dass nicht mehr als eine Methode dasselbe Muster aufweist.
Außerdem gibt es noch eine interessante Anmerkung: @MatrixVariable
Und die Controller-Methode dafür
Aber Sie müssen aktivieren:
quelle
userName
einen Typparameter, haben oder nicht? Ich neige dazu, es zu einer Variablen zu machen, aber es könnte auch ein Parameter sein.@PathParam
und@RequestParam
kann ohne Verwendung deklariert werden@RequestMapping
@RequestParam wird für Abfrageparameter (statische Werte) wie: http: // localhost: 8080 / berechnung / pow? Base = 2 & ext = 4 verwendet
@PathVariable wird für dynamische Werte wie http: // localhost: 8080 / berechnung / sqrt / 8 verwendet
quelle
1)
@RequestParam
wird verwendet, um Abfrageparameter zu extrahierenwhile
@PathVariable
wird verwendet, um Daten direkt aus dem URI zu extrahieren:2)
@RequestParam
ist nützlicher in einer herkömmlichen Webanwendung, in der Daten meistens in den Abfrageparametern übergeben werden, während@PathVariable
es besser für RESTful-Webdienste geeignet ist, in denen URL Werte enthält.3)
@RequestParam
Annotation kann Standardwerte angeben , wenn ein Abfrageparameter nicht vorhanden oder leer ist, indem eindefaultValue
Attribut verwendet wird, vorausgesetzt, das erforderliche Attribut lautetfalse
:quelle
quelle
Beide Anmerkungen verhalten sich genau gleich.
Nur 2 Sonderzeichen '!' und '@' werden von den Anmerkungen @PathVariable und @RequestParam akzeptiert.
Um das Verhalten zu überprüfen und zu bestätigen, habe ich eine Spring-Boot-Anwendung erstellt, die nur 1 Controller enthält.
Bei folgenden Anfragen habe ich die gleiche Antwort erhalten:
! @ wurde in beiden Anfragen als Antwort empfangen
quelle
Es kann sein, dass die Anwendung / x-www-form-urlencoded midia type Leerzeichen in + konvertiert und der Empfänger die Daten durch Konvertieren von + in Leerzeichen dekodiert. Überprüfen Sie die URL, um weitere Informationen zu erhalten. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
quelle