Polkumuuttujat
Polkuja käytetään resurssien tunnistamiseen ja yksilöintiin. Usein vastaan tulee tilanne, missä luodut resurssit ovat uniikkeja, emmekä tiedä niiden tietoja ennen sovelluksen käynnistymistä — emme voi siis määritellä eksaktia polkua, joka tunnistaisi vielä tuntemattoman resurssin.
Yksi vaihtoehto tällaisen tilanteen ratkaisemiseksi on kontrolleriluokassa olevan metodin määrittely siten, että metodi käsittelee aina tiettyyn polkuun tulevat pyynnöt, ja pyynnön mukana tulevalla parametrilla tunnistetaan resurssit. Esimerkiksi pyyntö polkuun /henkilot?id=3
näyttäisi tietokannasta sen henkilön tiedot, jonka id
-sarakkeen arvo on 3
.
@GetMapping
määriteltävään polkuun voidaan määritellä polkumuuttuja aaltosulkujen avulla. Esimerkiksi polku "/{arvo}"
ottaisi vastaan minkä tahansa juuripolun alle tulevan kyselyn ja tallentaisi arvon myöhempää käyttöä varten. Tällöin jos käyttäjä tekee pyynnön esimerkiksi osoitteeseen http://localhost:8080/kirja
, tallentuu arvo "kirja" myöhempää käyttöä varten. Polkumuuttujiin pääsee käsiksi pyyntöä käsittelevälle metodille määriteltävän annotaation @PathVariable avulla.Jatketaan aiemman henkilöesimerkin kanssa. Nyt yksittäisen henkilön hakeminen onnistuisi esimerkiksi seuraavalla tavalla.
@Controller
public class HenkiloController {
@Autowired
private HenkiloRepository henkiloRepository;
@GetMapping("/")
public String list(Model model) {
model.addAttribute("list", henkiloRepository.findAll());
return "henkilot"; // tässä oletetaan erillinen tiedosto henkilot.html
}
@PostMapping("/")
public String create(@RequestParam String nimi) {
henkiloRepository.save(new Henkilo(nimi));
return "redirect:/";
}
@GetMapping("/{id}")
public String getOne(Model model, @PathVariable Long id) {
model.addAttribute("henkilo", henkiloRepository.getOne(id));
return "henkilo";
}
}
Yllä olevassa esimerkissä metodi getOne
käsittelee pyyntöjä ennalta määrittelemättömään osoitteeseen /{id}
. Tässä {id}
tarkoittaa käytännössä sitä, että Spring ottaa polusta osan talteen ja asettaa sen pyynnön käsittelevän metodin id
-nimiseen muuttujaan, jolle on määritelty @PathVariable
-annotaatio. Kun metodia kutsutaan, se saa parametrinaan polkuun asetetun muuttujan, joka muunnetaan Long-tyyppiseksi. Metodissa haetaan tietokantataulusta Henkilo rivi pääavaimen id
perusteella — palautettu arvo lisätään Modeliin, jonka jälkeen tietokannasta haettu tieto näytetään osana henkilo.html
-tiedostoa.