Arasındaki fark nedir @RequestParam
ve @PathVariable
özel karakterler işlerken?
+
tarafından @RequestParam
boşluk olarak kabul edildi .
Durumunda @PathVariable
, +
olarak kabul edildi +
.
Arasındaki fark nedir @RequestParam
ve @PathVariable
özel karakterler işlerken?
+
tarafından @RequestParam
boşluk olarak kabul edildi .
Durumunda @PathVariable
, +
olarak kabul edildi +
.
Yanıtlar:
@PathVariable
URI'den bir yer tutucu elde etmektir (Bahar URI Şablonu olarak adlandırılır) - Yay Referansı Bölüm 16.3.2.2 URI Şablon Kalıplarına bakın@RequestParam
URI'den de bir parametre elde etmektir - Yay Referansı Bölüm 16.3.3.3 İstek parametrelerini @RequestParam ile yöntem parametrelerine bağlamaURL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
, 5 Aralık 2013 tarihinde 1234 kullanıcısı için fatura alırsa, denetleyici yöntemi şuna benzer:
@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 Bahar 4.3.3'ten itibaren yol değişkenleri de isteğe bağlı olabilir . Bununla birlikte, URL yolu hiyerarşisini değiştirebilir ve istek eşleme çakışmaları getirebilir. Örneğin, /user/invoices
kullanıcı için faturalar null
veya "faturalar" kimliğine sahip bir kullanıcıyla ilgili ayrıntılar sağlar mı?
@PathParam
yalnızca uri şablonunda bir yer tutucu varsa çalışır)
@PathParam
bir javax.ws.rs ek açıklamasıdır. docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.html
@RequestParam ek açıklaması, istekten sorgu parametre değerlerine erişmek için kullanılır. 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){
...
}
@RequestParam ek açıklaması tarafından desteklenen parametrelerin listesi aşağıdadır:
@PathVariable
@ PathVariable , gelen istek için URI'de kullanılan kalıbı tanımlar. Aşağıdaki istek URL'sine bakalım:
http: // localhost: 8080 / springmvc / merhaba / 101 Param1 = 10 & param2 = 20
Yukarıdaki URL isteği Spring MVC'nize 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ında istek URI şablonunu bağlamak için yalnızca bir özellik değeri vardır. Tek bir yöntemde çoklu @ PathVariable ek açıklamasının kullanılmasına izin verilir . Ancak, birden fazla yöntemin aynı kalıba sahip olmadığından emin olun.
Ayrıca daha ilginç bir ek açıklama var: @MatrixVariable
Ve bunun için Controller 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";
}
Ancak şunları etkinleştirmelisiniz:
<mvc:annotation-driven enableMatrixVariables="true" >
userName
bir param türü olup olmayacak mı? Değişken yapmaya yöneliyorum, ama bu bir param olabilir.
@PathParam
ve @RequestParam
kullanılmadan beyan edilmesi@RequestMapping
@RequestParam şu sorgu parametresi (statik değerler) için kullanılır: http: // localhost: 8080 / hesaplama / pow? Base = 2 & ext = 4
@PathVariable, http: // localhost: 8080 / hesaplama / sqrt / 8 gibi dinamik değerler için kullanılır
@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) sorgu parametrelerini@RequestParam
çıkarmak için kullanılır
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);
}
while @PathVariable
, verileri doğrudan URI'den ayıklamak için kullanılır:
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
verilerin çoğunlukla sorgu parametrelerinde iletildiği geleneksel bir web uygulamasında daha yararlı olurken @PathVariable
, URL'nin değer içerdiği RESTful web hizmetleri için daha uygundur.
3) @RequestParam
açıklama, bir özellik kullanılarak bir sorgu parametresi mevcut değilse veya boş değilse , gerekli özellik olması koşuluyla varsayılan değerleri belirtebilir :defaultValue
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";
}
}
@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) {
}
Her iki ek açıklama da aynı şekilde davranır.
Sadece 2 özel karakter '!' ve '@' @PathVariable ve @RequestParam ek açıklamaları tarafından kabul edilir.
Davranışı kontrol etmek ve onaylamak için yalnızca 1 denetleyici içeren bir yay önyükleme uygulaması oluşturdum.
@RestController
public class Controller
{
@GetMapping("/pvar/{pdata}")
public @ResponseBody String testPathVariable(@PathVariable(name="pdata") String pathdata)
{
return pathdata;
}
@GetMapping("/rpvar")
public @ResponseBody String testRequestParam(@RequestParam("param") String paramdata)
{
return paramdata;
}
}
Aşağıdaki istekleri vurmak aynı yanıtı aldım:
! @ her iki istekte de yanıt olarak alındı
uygulama / x-www-form-urlencoded midia tipi alanı + 'ya dönüştürür ve alıcı +' yı space'e dönüştürerek verileri çözer . daha fazla bilgi için url'yi kontrol edin. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
@PathVariable
herhangi bir RequestMethod kullanılabilir