Was ist der Unterschied zwischen @RequestParam
y @PathVariable
bei der Behandlung von Sonderzeichen?
+
wurde angenommen von @RequestParam
als Raum.
Im Fall von @PathVariable
, +
wurde angenommen als +
.
Was ist der Unterschied zwischen @RequestParam
y @PathVariable
bei der Behandlung von Sonderzeichen?
+
wurde angenommen von @RequestParam
als Raum.
Im Fall von @PathVariable
, +
wurde angenommen als +
.
@PathVariable
ist es, einen Platzhalter aus dem URI zu erhalten (Spring nennt es eine URI-Vorlage) - siehe Spring-Referenzkapitel 16.3.2.2 URI-Schablonenmuster@RequestParam
ist es, auch einen Parameter aus dem URI zu erhalten - siehe Spring Referenz Kapitel 16.3.3.3 Binden von Anfrageparametern an Methodenparameter mit @RequestParamWenn die URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
die Rechnungen für den Benutzer 1234 am 5. Dezember 2013 erhält, würde die Controller-Methode wie folgt aussehen:
@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 Abfrageparameter optional sein, und ab Spring 4.3.3 können Pfadvariablen kann auch optional sein . Beachten Sie jedoch, dass sich dadurch die URL-Pfadhierarchie ändern und Konflikte bei der Zuordnung von Anfragen auftreten können. Zum Beispiel, würde /user/invoices
die Rechnungen für die Nutzer bereitstellen null
oder Details über einen Benutzer mit der ID "Rechnungen"?
@RequestParam Anmerkung, die für den Zugriff auf die Werte der Abfrageparameter aus der Anfrage verwendet wird. Sehen Sie sich die folgende Anfrage-URL an:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
In der obigen URL-Anfrage kann auf die Werte für param1 und param2 wie folgt zugegriffen werden:
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
Im Folgenden sind die Parameter aufgeführt, die von der @RequestParam-Annotation unterstützt werden:
@PfadVariable
@ PfadVariable identifiziert das Muster, das im URI für die eingehende Anfrage verwendet wird. Schauen wir uns die unten stehende Anfrage-URL an:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
Die obige URL-Anforderung kann in Ihrem Spring MVC wie folgt geschrieben werden:
@RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
Die @ PfadVariable Annotation hat nur einen Attributwert für die Bindung der Anfrage-URI-Vorlage. Es ist erlaubt, die mehreren @ PfadVariable Anmerkung in der einzelnen Methode. Achten Sie aber darauf, dass nicht mehr als eine Methode das gleiche Muster hat.
Außerdem gibt es eine weitere interessante Anmerkung: @MatrixVariable
Und die Controller-Methode dafür
@RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {
logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });
List<List<String>> outlist = map2List(matrixVars);
model.addAttribute("stocks", outlist);
return "stocks";
}
Aber Sie müssen es ermöglichen:
<mvc:annotation-driven enableMatrixVariables="true" >
@RequestParam wird für Abfrageparameter (statische Werte) wie: http://localhost:8080/calculation/pow?base=2&ext=4
@PathVariable wird für dynamische Werte wie : http://localhost:8080/calculation/sqrt/8
@RequestMapping(value="/pow", method=RequestMethod.GET)
public int pow(@RequestParam(value="base") int base1, @RequestParam(value="ext") int ext1){
int pow = (int) Math.pow(base1, ext1);
return pow;
}
@RequestMapping("/sqrt/{num}")
public double sqrt(@PathVariable(value="num") int num1){
double sqrtnum=Math.sqrt(num1);
return sqrtnum;
}
1) @RequestParam
wird verwendet, um die Abfrageparameter
http://localhost:3000/api/group/test?id=4
@GetMapping("/group/test")
public ResponseEntity<?> test(@RequestParam Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
während @PathVariable
wird verwendet, um Daten direkt aus dem URI zu extrahieren:
http://localhost:3000/api/group/test/4
@GetMapping("/group/test/{id}")
public ResponseEntity<?> test(@PathVariable Long id) {
System.out.println("This is test");
return ResponseEntity.ok().body(id);
}
2) @RequestParam
ist nützlicher für eine traditionelle Webanwendung, bei der die Daten meist in den Abfrageparametern übergeben werden, während @PathVariable
ist besser geeignet für RESTful-Webdienste, bei denen die URL Werte enthält.
3) @RequestParam
Annotation kann angeben Standardwerte wenn ein Abfrageparameter nicht vorhanden oder leer ist, indem er eine defaultValue
Attribut, sofern das erforderliche Attribut false
:
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = "/name")
String getName(@RequestParam(value = "person", defaultValue = "John") String personName) {
return "Required element of request param";
}
}
Kann es sein, dass der Typ application/x-www-form-urlencoded midia Leerzeichen in + und der Empfänger dekodiert die Daten durch Umwandlung der + in den Weltraum. Weitere Informationen finden Sie unter der URL. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.