PL
Spring Boot 2 - przekazywanie parametrów zapytań (@RequestParam)
7
points
Celem tego artykułu jest pokazanie, jak w prosty sposób można przekazywać parametry w adresie URL w aplikacji Spring Boot.
Jako parametry przekazywane w adresie URL rozumiemy konstrukcję:
?name1=value1&name2=value2&nameN=valueN
która może się znaleźć w dowolnym adresie URL, np.
https://some-domain.com/some/path?name1=value1&name2=value2&nameN=valueN
Gdzie:
?oznacza początek parametrów,&oznacza separator parametrów,- ilość parametrów może być dowolna,
- przekazywane parametry to:
Nazwa paramtru Wartość paramtru name1value1name2value2nameNvalueN
Przaktyczny przykład
W Spring Boot możemy takie parametry przekazywać jako argumenty do metody z mapowaniem, gdy użyjemy adnotacji @RequestParam koło argumentów.
Przykład użycia mapowania:
Przykładowy kod kontrolera:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ExampleController {
// http://localhost:8080/api/items?pageNumber=1&pageSize=20
//
@RequestMapping("/api/items")
@ResponseBody
public Object getItems(
@RequestParam Integer pageNumber,
@RequestParam Integer pageSize
) {
return "Parametry: pageNumber=" + pageNumber + " pageSize=" + pageSize;
}
}
Gdzie:
- nazwy argumentów
pageNumberipageSizesą mapowane na nazwy przekazywanych parametrów w adresie URL, - parametry w powyższym przykładzie są wymagane więc jeśli ich nie podamy to metoda
getItems()się nie wykona (required=falsenie zostało ustawione dla@RequestParam).
Konfiguracja parametrów
Za pomocą konfiguracji w @RequestParam możemy:
- ustawić czy parametr ma być wymagany,
np.required=truelubrequired=falseUwagi:
- domyślnie parametry są wymagane (
required=true), - niewymagany parametr posiada wartość
null(required=false).
- domyślnie parametry są wymagane (
- ustawiać domyślne wartości parametrów, gdy nie zostaną przekazane w adresie URL,
np.defaultValue="value_here" - mapować różne nazwy parametrów na różne nazwy argumentów,
np.name="parameter-name"
Przykład użycia mapowania:
Przykładowy kod kontrolera:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ExampleController {
// http://localhost:8080/api/items
// http://localhost:8080/api/items?author=100
// http://localhost:8080/api/items?page=1&amount=20
// http://localhost:8080/api/items?author=100&page=1&amount=20
//
@RequestMapping("/api/items")
@ResponseBody
public Object getItems(
@RequestParam(name = "author", required = false ) Long authorId,
@RequestParam(name = "page", defaultValue = "1" ) Integer pageNumber,
@RequestParam(name = "amount", defaultValue = "20") Integer pageSize
) {
return "Parametry: author=" + authorId + " page=" + pageNumber + " amount=" + pageSize;
}
}