Özel karakterleri işlerken @RequestParam
ve @PathVariable
arasındaki fark nedir?
+
, @RequestParam
tarafından boşluk olarak kabul edildi.
@PathVariabledurumunda
+,
+` olarak kabul edilmiştir.
@PathVariable
URI'den bir yer tutucu elde etmek içindir (Spring buna URI Şablonu der)URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
5 Aralık 2013 tarihinde 1234 kullanıcısına ait faturaları alırsa, denetleyici yöntemi aşağıdaki gibi görünür:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Ayrıca, istek parametreleri isteğe bağlı olabilir ve Spring 4.3.3'ten itibaren yol değişkenleri de isteğe bağlı olabilir. Ancak dikkatli olun, bu URL yolu hiyerarşisini değiştirebilir ve istek eşleme çakışmalarına neden olabilir. Örneğin, /user/invoices
, null
kullanıcısının faturalarını mı yoksa "invoices" kimliğine sahip bir kullanıcı hakkındaki ayrıntıları mı sağlar?
Sorgu parametre değerlerine istekten erişmek için kullanılan @RequestParam ek açıklaması. Aşağıdaki istek URL'sine bakın:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
Yukarıdaki URL isteğinde, param1 ve param2 değerlerine aşağıdaki gibi erişilebilir:
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
Aşağıda @RequestParam ek açıklaması tarafından desteklenen parametrelerin listesi verilmiştir:
@PathVariable
@PathVariable gelen istek için URI'de kullanılan kalıbı tanımlar. Aşağıdaki istek URL'sine bakalım:
Yukarıdaki URL isteği Spring MVC'nizde aşağıdaki gibi yazılabilir:
@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){
.......
}
@PathVariable ek açıklamasının istek URI şablonunu bağlamak için yalnızca bir öznitelik değeri vardır. Tek bir yöntemde birden fazla @PathVariable ek açıklamasının kullanılmasına izin verilir. Ancak, birden fazla yöntemin aynı şablona sahip olmadığından emin olun.
Ayrıca ilginç bir açıklama daha var: @MatrixVariable
Ve bunun için Denetleyici yöntemi
@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";
}
Ama etkinleştirmelisiniz:
<mvc:annotation-driven enableMatrixVariables="true" >
application/x-www-form-urlencoded midia türü boşluğu +'ya dönüştürüyor olabilir ve alıcı +'yı boşluğa dönüştürerek verilerin kodunu çözecektir. daha fazla bilgi için url'yi kontrol edin.http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1