Skip to content

BMEVIAUBB04/gyakorlat-rest-spring-mvc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

REST API fejlesztése Spring MVC technológiával

Beugró kérdések

  • Írd le, hogy a HTTP metódusoknak milyen konvencionális jelentése van a REST API-kban.
  • Készítsd el egy Spring MVC-beli controller metódus vázát, amelyik a /users URL-en fogad GET kérést, és User objektumok listáját adja vissza a törzsben.
  • Ismertess a Spring MVC controllereiben használhatók annotációk közül legalább hármat.
  • Milyen részei vannak egy HTTP kérésnek, amelyek meghatározzák a kérést?
  • Hogyan lehet megadni, hogy egy metódus milyen HTTP státuszkódot generáljon?

A labor során egy apróhirdetési portál backendjét készítjük el, amely REST API-n képes fogadni a kéréseket webalkalmazától, mobil apptól vagy akár vastagkliens-alkalmazástól. Kliensalkalmazást azonban most nem készítünk, csupán a Postman programmal teszteljük a backendet.

A feladatok

Előkészületek

  • Töltsük le, és csomagoljuk ki a projekt vázát a tantárgy weboldaláról.
  • Indítsuk el az Eclipse fejlesztőkörnyezetet.
  • Importáljuk a projektvázat Maven projektjént.
  • A projektváz egy Spring Boot alkalmazás, amely induláskor beágyazott HSQL relációs adatbázist indít a memóriában. Az alkalmazásban konfigurálva van a JPA, és van egy Note entitásunk, valamint REST endpointok, hogy szöveges feljegyzéseket vigyünk fel, és tároljunk el az adatbázisban. Ezek majd később törölhetők, egyelőre tanulási célokat szolgálnak, és a későbbi feladathoz szolgálnak támpontul.
  • Indítsuk el az alkalmazást!
  • Indítsuk el a Postmant a start menüből! A laborvezetővel együtt vizsgáljuk meg a REST elvű kommunikáció működését az adott Node entitással.

1. feladat

  • Készítsd el a hirdetések kezeléséhez az Ad entitást! Tartalmazza az alábbi adatokat:
    • Generált azonosító
    • Cím
    • Leírás
    • Ár (int)
    • Létrehozás ideje – ez a backendben töltődjön ki
  • Készíts egy AdRepository osztályt, és ebben valósítdk meg a mentés műveletét!
  • Készíts egy AdController osztályt, és ebben a POST –kérést kezelő metódust, amellyel majd a mentés REST hívással elvégezhető!
  • A POST-kérés adja vissza a mentés utáni állapotot, a kitöltött azonosítóval és létrehozási idővel!
  • Teszteld Postmannel a hirdetésfeladást!

2. feladat

  • Készítsd el a keresés adatbázisműveletet az AdRepository osztályban, amely minimális és maximális árak alapján adja vissza a találatokat.
  • Készítsd el az AdControllerben a GET-kérést kezelő metódust! A paramétereket request- paraméterekként vegyük át. Az árak megadása legyenopcionális. A minimális ár alapértelmezett érteke 0, a maximálisé pedig 10 000 000.
  • Teszteld Postmannel a keresést!

3. feladat

  • A változtatást fogjuk megvalósítani, de bejelentkezés hiányában nem tudjuk, hogy ki adta fel a hirdetést, tehát ki módosíthatja. Ezért először egy „titkos” kódot kell generálnunk a hirdetések feladásakor. A hirdető ezt visszakapja, és ez alapján lesz majd képes később a hirdetést módosítani.
  • Vegyél fel egy új tagváltozót a kódnak az Ad entitásba!
  • Mentéskor generálj egy hat karakter hosszú kódot, és a mentéskor ezt add vissza. Használhatod az alábbi algoritmust:
public class SecretGenerator {
    private static final char[] CHARS =
        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
    private static final Random RND = new Random();

    public static String generate() {
        StringBuffer sb = new StringBuffer();
            for(int i = 0; i < 6; i++)
                sb.append(CHARS[RND.nextInt(CHARS.length)]);
        return sb.toString();
    }
}
  • Módosítsd a keresést úgy, hogy az AdControllerben az eredményhalmaz visszaadása előtt, minden találat kódját nullázd ki, hogy ne adjuk vissza.
  • Készíts egy metódust az AdRepository-ban, amely a módosított hirdetést várja úgy, hogy a titkos kód is ki van benne töltve. A metódus kérdezze le ID alapján a hirdetést, hasonlítsa össze a titkos kódot, és csak akkor végezze el a módosítást, ha egyezik a kód. Visszatérési értékkel vagy kivételdobással jelezheted, ha nem sikeres a módosítás.
  • Az AdController metódusa PUT hívást fogadjon a módosított állapotot pedig a törzsben vegye át. Ha sikeres a módosítás, akkor OK, ha nem jó a kód, akkor FORBIDDEN legyen a visszaadott HTTP státusz!
  • Teszteld Postmannel a módosítást!

4. feladat (önálló)

  • Tegyük lehetővé, hogy a hirdetések tageket is kezelhessenek. Ezek tetszőleges szöveges címkék, amelyek utalnak a cikk jellegére, pl. "bútor", és egy cikknek tetszőleges számú ilyen címke megadható. Először egészítsük ki az Ad osztályt a megfelelő tagváltozóval, és alkalmazzuk rajta a megfelelő annotációt.
  • Vezessünk be egy GET /api/ads/{tag} endpointot, ahol {tag} helyére a megfelelő címkét lehet írni, és csak azokat a cikkeket listázza, amelyek rendelkeznek a taggel. (Az útvonalból a tag értékét a metódus paraméterként kapja meg, ezt @PathVariable annotációval kell ellátni.)
  • Teszteld Postmannel a funkciót!

5. feladat (önálló)

  • A hirdetéseknek lehessen lejáratot (dátum és idő) megadni. Ehhez először az Ad osztályt egészítsük ki egy LocalDateTime típusú tagváltozóval. Ennek megadása ne legyen kötelező.
  • A lejáratot úgy tudjuk kezelni, ha periodikusan (pl. percenként) futtatunk egy metódust, amely átnézi, és törli az összes olyan hirdetést, amelynek a lejárati ideje korábbi, mint a jelenlegi dátum és idő. Ehhez először az időzítő-szolgáltatásokat kell engedélyezni. Az Application osztályra tegxük rá az @EnableScheduling annotációt.
  • Valamelyik Spring komponensben készítsünk egy olyan metódust, amelyen a @Scheduled(fixedDelay= 6000) annotációt. Ebben valósítsuk meg a már lejárt hirdetések törlését.
  • Teszteljük a működést egy rövid lejáratú hirdetés felvitelével!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages