Projekt

Obecné

Profil

Spring REST Controller » Historie » Revize 9

Revize 8 (Jiří Trefil, 2023-03-15 22:33) → Revize 9/10 (Jiří Trefil, 2023-03-15 22:34)

h1. Spring REST Controller 

 * Controller řídí logiku toku informací aplikace s MVC architekturou, tedy řídí, jak uživatel s aplikací komunikuje. Rozhoduje, jaký response odeslat na konkrétní uživatelský request. 
 * Spring aplikace v kontextu SPADe v2 je pouze RESTové API, všechny controllery jsou tedy anotovány pomocí @RestController. Tato anotace implikuje, že třída je REST controller (správná konvence). 
 * Každý controller bude vracet response skládající se z HTTP stavového kódu (nese informaci o výsledku operace) a JSON objekt obsahující libovolného relevantní informace. 


 h2. Dvě hlavní anotace controllerů a jakou použít 

 * Existují dvě anotace, které je možné použít při vytváření RESTful aplikace. @Controller a *@RestController*. Anotace @Controller je více generická a označuje obecný controller - ne nutně REST controller! 
 * Druhá anotace pohodlně slučuje dohromady anotaci @Controller a @ResponseBody. Aplikace je čitelnější - programátor ví, že následující třída je právě REST controller a *ví, jaké chování může očekávat*. 


 h2. Příklad REST controlleru (TODO REPLACE template controlleru, až bude nějaký ustálený) 


 <pre><code class="java"> 
 
 // anotace RestController - říká, že třída DummyController je REST controllerem 
 @RestController 
 public class DummyController { 
     // RequestMapping - velice prostá anotace, která říká, že HTTP request je mapován na konkrétní metodu 
     // V tomto případě je HTTP request na localhost/v2/helloworld mapován na tento controller a na metodu HelloWorld 
     // value - konkrétní path, na které je tato metoda pověšena 
     // produce - co controller vrací (Content-type v headeru response objektu), tady slibujeme, že vracíme JSON 
     // method - na jaký typ requestu posloucháme, v tomto případě GET 
     @RequestMapping(value = "/v2/helloworld", produces="application/json", method = RequestMethod.GET) 
     public String helloWorld(@RequestParam(value = "parameter", defaultValue=" World") String parameter){ 
         // zde samotný kód, který zpracuje request 
         // je maximálně vhodné z controlleru volat nějakou service, která reprezentuje logiku aplikace a nevykonávat zde nic těžkého 
         // tedy zde jenom přijmu request, předám ho service, od service dostanu výsledek a odpovím 
         return "{\"message\":\"Hello "+parameter+"\"}"; 
     } 
     //zde pouze změna v method 
     // method - POST - touto metodou budeme odpovídat na requesty typu POST. Zbytek platí stejně jako u metody výše. 
     @RequestMapping(value = "/v2/helloworld", produces="application/json", method = RequestMethod.POST) 
     public String goodbyeWorld(@RequestParam(value = "parameter", defaultValue=" World") String parameter){ 
         // zde samotný kód, který zpracuje request 
         // tedy zde jenom přijmu request, předám ho service, od service dostanu výsledek a odpovím 
         return "{\"message\":\"Bye "+parameter+"\"}"; 
     } 

 } 
 </code></pre> 

 h2. Dvě hlavní anotace controllerů a jakou použít 

 * Existují dvě anotace, které je možné použít při vytváření RESTful aplikace. @Controller a *@RestController*. Anotace @Controller je více generická a označuje obecný controller - ne nutně REST controller! 
 * Druhá anotace pohodlně slučuje dohromady anotaci @Controller a @ResponseBody. Aplikace je čitelnější - programátor ví, že následující třída je právě REST controller a *ví, jaké chování může očekávat*.