Spring REST Controller » Historie » Verze 10
Jiří Trefil, 2023-05-22 18:12
1 | 1 | Jiří Trefil | h1. Spring REST Controller |
---|---|---|---|
2 | 2 | Jiří Trefil | |
3 | * 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. |
||
4 | * 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). |
||
5 | 6 | Jiří Trefil | * 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. |
6 | 3 | Jiří Trefil | |
7 | 9 | Jiří Trefil | |
8 | h2. Dvě hlavní anotace controllerů a jakou použít |
||
9 | |||
10 | * 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! |
||
11 | * 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*. |
||
12 | |||
13 | |||
14 | 10 | Jiří Trefil | h2. Příklad REST controlleru |
15 | 3 | Jiří Trefil | |
16 | |||
17 | 1 | Jiří Trefil | <pre><code class="java"> |
18 | 4 | Jiří Trefil | |
19 | // anotace RestController - říká, že třída DummyController je REST controllerem |
||
20 | @RestController |
||
21 | 3 | Jiří Trefil | public class DummyController { |
22 | 4 | Jiří Trefil | // RequestMapping - velice prostá anotace, která říká, že HTTP request je mapován na konkrétní metodu |
23 | // V tomto případě je HTTP request na localhost/v2/helloworld mapován na tento controller a na metodu HelloWorld |
||
24 | // value - konkrétní path, na které je tato metoda pověšena |
||
25 | // produce - co controller vrací (Content-type v headeru response objektu), tady slibujeme, že vracíme JSON |
||
26 | // method - na jaký typ requestu posloucháme, v tomto případě GET |
||
27 | @RequestMapping(value = "/v2/helloworld", produces="application/json", method = RequestMethod.GET) |
||
28 | 1 | Jiří Trefil | public String helloWorld(@RequestParam(value = "parameter", defaultValue=" World") String parameter){ |
29 | 4 | Jiří Trefil | // zde samotný kód, který zpracuje request |
30 | // je maximálně vhodné z controlleru volat nějakou service, která reprezentuje logiku aplikace a nevykonávat zde nic těžkého |
||
31 | // tedy zde jenom přijmu request, předám ho service, od service dostanu výsledek a odpovím |
||
32 | 1 | Jiří Trefil | return "{\"message\":\"Hello "+parameter+"\"}"; |
33 | 4 | Jiří Trefil | } |
34 | //zde pouze změna v method |
||
35 | // method - POST - touto metodou budeme odpovídat na requesty typu POST. Zbytek platí stejně jako u metody výše. |
||
36 | @RequestMapping(value = "/v2/helloworld", produces="application/json", method = RequestMethod.POST) |
||
37 | public String goodbyeWorld(@RequestParam(value = "parameter", defaultValue=" World") String parameter){ |
||
38 | 2 | Jiří Trefil | // zde samotný kód, který zpracuje request |
39 | 1 | Jiří Trefil | // tedy zde jenom přijmu request, předám ho service, od service dostanu výsledek a odpovím |
40 | 7 | Jiří Trefil | return "{\"message\":\"Bye "+parameter+"\"}"; |
41 | 8 | Jiří Trefil | } |
42 | 7 | Jiří Trefil | |
43 | } |
||
44 | </code></pre> |