Apa perbedaan antara @RequestParam
dan @PathVariable
saat menangani karakter khusus?
+
diterima @RequestParam
sebagai ruang.
Dalam kasus @PathVariable
, +
diterima sebagai +
.
@PathVariable
adalah untuk memperoleh beberapa placeholder dari URI (Semi menyebutnya URI Template)
— lihat Semi Referensi Bab 16.3.2.2 URI Template Pola@RequestParam
adalah untuk mendapatkan parameter dari URI serta — lihat Semi Referensi Bab 16.3.3.3 Mengikat permintaan parameter untuk parameter metode dengan @RequestParamJika URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
mendapat faktur untuk pengguna 1234 pada november 5th, 2013, metode kontroler akan terlihat seperti:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Juga, permintaan parameter dapat opsional, dan sebagai musim Semi 4.3.3 variabel path dapat opsional juga. Berhati-hatilah meskipun, ini mungkin mengubah URL jalur hirarki dan memperkenalkan permintaan pemetaan konflik. Misalnya, akan /user/faktur
memberikan faktur untuk pengguna null
atau rincian tentang pengguna dengan ID "faktur"?
@RequestParam penjelasan digunakan untuk mengakses parameter kueri nilai-nilai dari permintaan. Melihat permintaan berikut URL:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
Di URL di atas permintaan, nilai-nilai untuk param1 dan param2 dapat diakses seperti di bawah ini:
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
Berikut adalah daftar parameter yang didukung oleh @RequestParam penjelasan:
@PathVariable
@PathVariable mengidentifikasi pola yang digunakan dalam URI permintaan yang masuk. Mari kita lihat di bawah ini request URL:
URL di atas permintaan dapat ditulis dalam Spring MVC seperti di bawah ini:
@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){
.......
}
Yang @PathVariable anotasi hanya memiliki satu nilai atribut untuk mengikat permintaan URI template. Hal ini memungkinkan untuk menggunakan beberapa @PathVariable penjelasan dalam metode tunggal. Tapi, memastikan bahwa tidak ada lebih dari satu metode memiliki pola yang sama.
Juga ada satu lagi yang menarik anotasi: @MatrixVariable
Dan metode Controller untuk itu
@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";
}
Namun, anda harus mengaktifkan:
<mvc:annotation-driven enableMatrixVariables="true" >
@RequestParam adalah penggunaan untuk kueri parameter(nilai statis) seperti: http://localhost:8080/calculation/pow?base=2&ext=4
@PathVariable ini digunakan untuk nilai-nilai yang dinamis seperti : 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;
}
mungkin application/x-www-form-urlencoded midia jenis mengkonversi ruang untuk +, dan penerima akan men-decode data dengan mengkonversi + untuk ruang.periksa url untuk info lebih lanjut.http://www.w3.org/TR/html401/berinteraksi/bentuk.html#h-17.13.4.1
@PathVariable - must be placed in the endpoint uri and access the query parameter value from the request
@RequestParam - must be passed as method parameter (optional based on the required property)
http://localhost:8080/employee/call/7865467
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = false) String callStatus) {
}
http://localhost:8080/app/call/7865467?status=Cancelled
@RequestMapping(value=“/call/{callId}", method = RequestMethod.GET)
public List<Calls> getAgentCallById(
@PathVariable(“callId") int callId,
@RequestParam(value = “status", required = true) String callStatus) {
}