Jaka jest różnica pomiędzy @RequestParam
i @PathVariable
podczas obsługi znaków specjalnych?
+
został zaakceptowany przez @RequestParam
jako przestrzeń.
W przypadku @PathVariable
, +
została przyjęta jako +
.
java
spring
spring-mvc
użytkownik1857181
źródło
źródło
@PathVariable
może być użyty w dowolnym RequestMethod@PathParam
działa tylko wtedy, gdy w szablonie uri znajduje się symbol zastępczy)@PathParam
jest adnotacją javax.ws.rs. docs.oracle.com/javaee/7/api/javax/ws/rs/PathParam.htmlAdnotacja @RequestParam używana do uzyskiwania dostępu do wartości parametrów zapytania z żądania. Spójrz na następujący adres URL żądania:
W powyższym żądaniu adresu URL wartości parametrów param1 i param2 są dostępne w następujący sposób:
Oto lista parametrów obsługiwanych przez adnotację @RequestParam:
@PathVariable
@ PathVariable identyfikuje wzorzec używany w URI dla przychodzącego żądania. Spójrzmy na poniższy adres URL żądania:
Powyższe żądanie adresu URL można zapisać w Spring MVC, jak poniżej:
Adnotacja @ PathVariable ma tylko jedną wartość atrybutu do powiązania szablonu URI żądania. Dozwolone jest stosowanie wielu adnotacji @ PathVariable w jednej metodzie. Ale upewnij się, że nie więcej niż jedna metoda ma ten sam wzór.
Jest jeszcze jedna interesująca adnotacja: @MatrixVariable
I metoda kontrolera
Ale musisz włączyć:
źródło
userName
param typu, czy nie? Skłaniam się ku uczynieniu go zmienną, ale może to być również param.@PathParam
i@RequestParam
można zadeklarować bez użycia@RequestMapping
@RequestParam służy do parametru zapytania (wartości statyczne), takiego jak: http: // localhost: 8080 / obliczenia / pow? Base = 2 i ext = 4
@PathVariable służy do dynamicznych wartości takich jak: http: // localhost: 8080 / obliczenia / sqrt / 8
źródło
1)
@RequestParam
służy do wyodrębnienia parametrów zapytaniawhile
@PathVariable
służy do wyodrębniania danych bezpośrednio z identyfikatora URI:2)
@RequestParam
jest bardziej przydatny w tradycyjnej aplikacji internetowej, w której dane są przekazywane głównie w parametrach zapytania, natomiast@PathVariable
jest bardziej odpowiedni dla usług sieciowych RESTful, w których adres URL zawiera wartości.3)
@RequestParam
adnotacja może określać wartości domyślne, jeśli parametr zapytania nie jest obecny lub pusty za pomocądefaultValue
atrybutu, pod warunkiem, że wymagany atrybut tofalse
:źródło
źródło
Oba adnotacje zachowują się dokładnie tak samo.
Tylko 2 znaki specjalne „!” i „@” są akceptowane w adnotacjach @PathVariable i @RequestParam.
Aby sprawdzić i potwierdzić zachowanie, stworzyłem aplikację do rozruchu wiosennego, która zawiera tylko 1 kontroler.
Otrzymałem tę samą odpowiedź:
! @ zostało odebrane jako odpowiedź na oba żądania
źródło
może się zdarzyć, że aplikacja / x-www-form-urlencoded midia type przekonwertuje przestrzeń na + , a odbiorca zdekoduje dane poprzez konwersję + na spację. zaznacz adres URL, aby uzyskać więcej informacji. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
źródło