Spring MVC
Miksi tarvitset Spring MVC:tä
Spring MVC auttaa järjestämään verkkosovelluksen noudattamalla vastuunjaon periaatetta, mikä helpottaa kehittämistä, testaamista ja ylläpitoa. Se tarjoaa kehyksen verkkosivujen luomiseen ja käyttäjäpyyntöjen käsittelyyn sekä mahdollisuuden integroitua liiketoimintalogiikkaan ja tietokantoihin.
Sovelluksessamme käytämme kolmitasoista arkkitehtuuria jakaaksemme logiikan erillisiin moduuleihin. Meillä on repository-, service- ja controller-kerrokset. Tämä erottelu helpottaa sovelluksen ylläpitoa ja testaamista.
Keskeiset annotaatiot ja niiden rooli
Jokaisella kerroksella on tietyt annotaatiot, jotka ovat olennaisia, jotta Spring voi automaattisesti tunnistaa ja rekisteröidä komponentit sovelluskontekstiin (tätä käsitellään myöhemmin). Tämä auttaa ylläpitämään selkeämpää arkkitehtuuria ja parantaa koodin luettavuutta.
Repository-kerroksen annotaatio
@Repository annotaatio osoittaa luokan, joka käsittelee tietokantaa. Näissä luokissa on tyypillisesti menetelmiä CRUD-operaatioiden suorittamiseen (Create, Read, Update, Delete).
UserRepository.java
1234567@Repository public class UserRepository { // Method to find a user by their ID public User findById(Long id) { // Logic to retrieve the user from the database } }
Tässä esimerkissä UserRepository on merkitty repositoryksi, jolloin Spring voi käsitellä tietojen käsittelyyn liittyvät poikkeukset ja integroida sen automaattisesti sovellukseen.
Service-kerroksen annotaatio
@Service annotaatiota käytetään osoittamaan luokka liiketoimintalogiikan komponentiksi. Nämä luokat sisältävät metodeja, jotka toteuttavat sovelluksen liiketoimintasäännöt ja toiminnot.
UserService.java
1234567@Service public class UserService { // Method to retrieve a user by their ID public User getUserById(Long id) { // Logic to get the user by ID } }
@Service -annotaatio osoittaa, että tämä luokka sisältää sovelluksen liiketoimintalogiikan, mikä helpottaa sen käyttöä sovelluksen muissa osissa. Tämä yksinkertaistaa kehitystä, koska luokan ilmentymiä ei tarvitse luoda manuaalisesti — Spring huolehtii siitä.
Controller-kerroksen annotaatio
Koska ohjainkerros toimii vuorovaikutuspisteenä asiakkaan ja sovelluksemme välillä, meidän täytyy määrittää päätepisteet, jotta asiakkaat voivat käyttää sitä. Tämä tarkoittaa, että tietyt URL-osoitteet liitetään jokaiseen metodiin, jolloin asiakkaat voivat vuorovaikuttaa metodien kanssa suoraan.
Tämän saavuttamiseksi luokka merkitään @Controller-annotaatiolla ja määritetään metodi pyynnönkäsittelijäksi.
Main.java
12345678@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }
@RequestMapping-annotaatiota käytetään yhdistämään HTTP-pyynnöt tiettyihin metodeihin ohjaimessa. Sen avulla määritellään, mihin URL-kuvioihin ja pyyntötyyppeihin (kuten GET tai POST) metodin tulee vastata. Esimerkiksi tässä tapauksessa home() vastaa GET-pyyntöihin, jotka tehdään juuri-URL-osoitteeseen.
Kun käyttäjä vierailee osoitteessa example.com/, hänen selaimensa lähettää HTTP GET -pyynnön palvelimelle, joka saapuu Spring-sovellukseen. Spring-kehys etsii vastaavan @RequestMapping-merkinnän HomeController-luokasta, kutsuu home()-metodia käsittelemään pyynnön ja lähettää sitten sopivan vastauksen käyttäjän selaimeen.
On olemassa annotaatioita, jotka tarjoavat tarkemman reitityksen pyynnön metodityypin mukaan, kuten @GetMapping, @PostMapping, @DeleteMapping ja niin edelleen. Niiden attribuuteissa määritellään yksinkertaisesti URL, jolla niihin voidaan päästä käsiksi.
Main.java
12345678@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }
Tässä esimerkissä, jos siirrytään URL-osoitteeseen /home, ohjataan vain home()-metodiin, jos kyseessä on GET-pyyntö. Jos käytetään muuta pyyntömenetelmää, palvelin vastaa kyseiseen URL-osoitteeseen 404 Not Found -virheellä.
@RequestParam
Mitä ovat URL-pyynnön parametrit? Nämä ovat parametreja, jotka näkyvät kysymysmerkin jälkeen URL-osoitteessa. Esimerkiksi, jos meillä on osoite -> example.com/home?name=Alex (avain = name, arvo = Alex), voimme hakea parametrin (name) suoraan welcomeUser()-metodissa.
Main.java
12345678@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }
Tässä parametri name poimitaan URL-osoitteesta (/home?name=Alex) ja välitetään welcomeUser() metodille.
Voit myös poimia useamman kuin yhden parametrin, ei vain yhtä. Kaikki parametrit URL-osoitteessa erotetaan &-merkillä. Esimerkiksi: example.com/home?name=Alex&age=20.
Main.java
12345@GetMapping("/home") public String getUserInfo(@RequestParam String name, @RequestParam int age) { // Logic to handle the request using 'name' and 'age' parameters return "User Name: " + name + ", Age: " + age; }
Tässä esimerkissä päätepistettä /home voidaan käyttää URL-osoitteella kuten example.com/home?name=Alex&age=20, jossa name ja age ovat parametreja, jotka välitetään metodille.
@PathVariable
Spring MVC:ssä @PathVariable-annotaatiota käytetään sitomaan muuttuja URL-osoitteesta suoraan metodin parametriksi. Tämän avulla voidaan ottaa talteen dynaamisia arvoja URL-osoitteesta ja hyödyntää niitä metodissa.
Jos tarvitsee asettaa URL-osoite dynaamisesti, eli välittää arvo suoraan URL-osoitteessa, voidaan käyttää @PathVariable-annotaatiota.
Esimerkiksi, jos käytössä on URL-malli kuten /users/{id}, voidaan @PathVariable-annotaatiolla saada käyttöön URL-osoitteen {id}-osa ja välittää se metodin parametriksi.
Main.java
12345678@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }
Tässä esimerkissä id poimitaan URL-osoitteesta (/user/123) ja välitetään getUser()-metodille, jossa arvo 123 asetetaan userId-parametrille.
Nämä annotaatiot auttavat kehittäjiä konfiguroimaan helposti HTTP-pyyntöjen käsittelyä, sitomaan dataa olioihin ja hallinnoimaan vastauksia, parantaen koodin luettavuutta ja ylläpidettävyyttä.
Yhteenveto
Spring MVC yksinkertaistaa verkkosovellusten kehitystä eriyttämällä pyyntöjen käsittelyn, sovelluslogiikan ja näkymän renderöinnin. Kontrollerit, jotka on merkitty @Controller- tai @RestController-annotaatiolla, käsittelevät pyyntöjä ja palauttavat näytettävää dataa.
1. Mitä @Controller-annotaatio tekee Spring MVC:ssä?
2. Mitä annotaatiomenetelmää käytetään käsittelemään GET requests Spring MVC:ssä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.45
Spring MVC
Pyyhkäise näyttääksesi valikon
Miksi tarvitset Spring MVC:tä
Spring MVC auttaa järjestämään verkkosovelluksen noudattamalla vastuunjaon periaatetta, mikä helpottaa kehittämistä, testaamista ja ylläpitoa. Se tarjoaa kehyksen verkkosivujen luomiseen ja käyttäjäpyyntöjen käsittelyyn sekä mahdollisuuden integroitua liiketoimintalogiikkaan ja tietokantoihin.
Sovelluksessamme käytämme kolmitasoista arkkitehtuuria jakaaksemme logiikan erillisiin moduuleihin. Meillä on repository-, service- ja controller-kerrokset. Tämä erottelu helpottaa sovelluksen ylläpitoa ja testaamista.
Keskeiset annotaatiot ja niiden rooli
Jokaisella kerroksella on tietyt annotaatiot, jotka ovat olennaisia, jotta Spring voi automaattisesti tunnistaa ja rekisteröidä komponentit sovelluskontekstiin (tätä käsitellään myöhemmin). Tämä auttaa ylläpitämään selkeämpää arkkitehtuuria ja parantaa koodin luettavuutta.
Repository-kerroksen annotaatio
@Repository annotaatio osoittaa luokan, joka käsittelee tietokantaa. Näissä luokissa on tyypillisesti menetelmiä CRUD-operaatioiden suorittamiseen (Create, Read, Update, Delete).
UserRepository.java
1234567@Repository public class UserRepository { // Method to find a user by their ID public User findById(Long id) { // Logic to retrieve the user from the database } }
Tässä esimerkissä UserRepository on merkitty repositoryksi, jolloin Spring voi käsitellä tietojen käsittelyyn liittyvät poikkeukset ja integroida sen automaattisesti sovellukseen.
Service-kerroksen annotaatio
@Service annotaatiota käytetään osoittamaan luokka liiketoimintalogiikan komponentiksi. Nämä luokat sisältävät metodeja, jotka toteuttavat sovelluksen liiketoimintasäännöt ja toiminnot.
UserService.java
1234567@Service public class UserService { // Method to retrieve a user by their ID public User getUserById(Long id) { // Logic to get the user by ID } }
@Service -annotaatio osoittaa, että tämä luokka sisältää sovelluksen liiketoimintalogiikan, mikä helpottaa sen käyttöä sovelluksen muissa osissa. Tämä yksinkertaistaa kehitystä, koska luokan ilmentymiä ei tarvitse luoda manuaalisesti — Spring huolehtii siitä.
Controller-kerroksen annotaatio
Koska ohjainkerros toimii vuorovaikutuspisteenä asiakkaan ja sovelluksemme välillä, meidän täytyy määrittää päätepisteet, jotta asiakkaat voivat käyttää sitä. Tämä tarkoittaa, että tietyt URL-osoitteet liitetään jokaiseen metodiin, jolloin asiakkaat voivat vuorovaikuttaa metodien kanssa suoraan.
Tämän saavuttamiseksi luokka merkitään @Controller-annotaatiolla ja määritetään metodi pyynnönkäsittelijäksi.
Main.java
12345678@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }
@RequestMapping-annotaatiota käytetään yhdistämään HTTP-pyynnöt tiettyihin metodeihin ohjaimessa. Sen avulla määritellään, mihin URL-kuvioihin ja pyyntötyyppeihin (kuten GET tai POST) metodin tulee vastata. Esimerkiksi tässä tapauksessa home() vastaa GET-pyyntöihin, jotka tehdään juuri-URL-osoitteeseen.
Kun käyttäjä vierailee osoitteessa example.com/, hänen selaimensa lähettää HTTP GET -pyynnön palvelimelle, joka saapuu Spring-sovellukseen. Spring-kehys etsii vastaavan @RequestMapping-merkinnän HomeController-luokasta, kutsuu home()-metodia käsittelemään pyynnön ja lähettää sitten sopivan vastauksen käyttäjän selaimeen.
On olemassa annotaatioita, jotka tarjoavat tarkemman reitityksen pyynnön metodityypin mukaan, kuten @GetMapping, @PostMapping, @DeleteMapping ja niin edelleen. Niiden attribuuteissa määritellään yksinkertaisesti URL, jolla niihin voidaan päästä käsiksi.
Main.java
12345678@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }
Tässä esimerkissä, jos siirrytään URL-osoitteeseen /home, ohjataan vain home()-metodiin, jos kyseessä on GET-pyyntö. Jos käytetään muuta pyyntömenetelmää, palvelin vastaa kyseiseen URL-osoitteeseen 404 Not Found -virheellä.
@RequestParam
Mitä ovat URL-pyynnön parametrit? Nämä ovat parametreja, jotka näkyvät kysymysmerkin jälkeen URL-osoitteessa. Esimerkiksi, jos meillä on osoite -> example.com/home?name=Alex (avain = name, arvo = Alex), voimme hakea parametrin (name) suoraan welcomeUser()-metodissa.
Main.java
12345678@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }
Tässä parametri name poimitaan URL-osoitteesta (/home?name=Alex) ja välitetään welcomeUser() metodille.
Voit myös poimia useamman kuin yhden parametrin, ei vain yhtä. Kaikki parametrit URL-osoitteessa erotetaan &-merkillä. Esimerkiksi: example.com/home?name=Alex&age=20.
Main.java
12345@GetMapping("/home") public String getUserInfo(@RequestParam String name, @RequestParam int age) { // Logic to handle the request using 'name' and 'age' parameters return "User Name: " + name + ", Age: " + age; }
Tässä esimerkissä päätepistettä /home voidaan käyttää URL-osoitteella kuten example.com/home?name=Alex&age=20, jossa name ja age ovat parametreja, jotka välitetään metodille.
@PathVariable
Spring MVC:ssä @PathVariable-annotaatiota käytetään sitomaan muuttuja URL-osoitteesta suoraan metodin parametriksi. Tämän avulla voidaan ottaa talteen dynaamisia arvoja URL-osoitteesta ja hyödyntää niitä metodissa.
Jos tarvitsee asettaa URL-osoite dynaamisesti, eli välittää arvo suoraan URL-osoitteessa, voidaan käyttää @PathVariable-annotaatiota.
Esimerkiksi, jos käytössä on URL-malli kuten /users/{id}, voidaan @PathVariable-annotaatiolla saada käyttöön URL-osoitteen {id}-osa ja välittää se metodin parametriksi.
Main.java
12345678@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }
Tässä esimerkissä id poimitaan URL-osoitteesta (/user/123) ja välitetään getUser()-metodille, jossa arvo 123 asetetaan userId-parametrille.
Nämä annotaatiot auttavat kehittäjiä konfiguroimaan helposti HTTP-pyyntöjen käsittelyä, sitomaan dataa olioihin ja hallinnoimaan vastauksia, parantaen koodin luettavuutta ja ylläpidettävyyttä.
Yhteenveto
Spring MVC yksinkertaistaa verkkosovellusten kehitystä eriyttämällä pyyntöjen käsittelyn, sovelluslogiikan ja näkymän renderöinnin. Kontrollerit, jotka on merkitty @Controller- tai @RestController-annotaatiolla, käsittelevät pyyntöjä ja palauttavat näytettävää dataa.
1. Mitä @Controller-annotaatio tekee Spring MVC:ssä?
2. Mitä annotaatiomenetelmää käytetään käsittelemään GET requests Spring MVC:ssä?
Kiitos palautteestasi!