Jarná topánka konzumujúca a produkujúca JSON
1. Prehľad
V tejto príručke si ukážeme ako vytvoriť službu REST na konzumáciu a výrobu obsahu JSON pomocou Spring Boot.
Taktiež sa pozrieme na to, ako môžeme ľahko použiť sémantiku HTTP RESTful.
Pre jednoduchosť nebudeme obsahovať vrstvu perzistencie, ale Spring Data ju tiež ľahko pridáva.
2. REST služba
Zápis služby JSON REST v Spring Boot je jednoduchý, pretože toto je jeho predvolený názor, keď je Jackson na ceste triedy:
@RestController @RequestMapping ("/ students") verejná trieda StudentController {@Autowired súkromná služba StudentService; @GetMapping ("/ {id}") verejné čítanie študentov (ID reťazca @PathVariable) {návrat service.find (id); } ...
Anotáciou našich StudentController s @RestController, povedali sme Spring Boot, aby napísala návratový typ súboru čítať metóda orgánu odpovede. Keďže máme aj a @RequestMapping na úrovni triedy, to by bolo rovnaké pre všetky ďalšie verejné metódy, ktoré pridáme.
Aj keď je to jednoduché, tomuto prístupu chýba sémantika protokolu HTTP. Čo by sa napríklad malo stať, ak nenájdeme požadovaného študenta? Namiesto vrátenia stavového kódu 200 alebo 500 možno budeme chcieť vrátiť 404.
Poďme sa pozrieť na to, ako získať väčšiu kontrolu nad samotnou odpoveďou HTTP a následne pridať niekoľko typických RESTful správaní k nášmu radiču.
3. Vytvorte
Keď potrebujeme ovládať iné aspekty odpovede ako telo - napríklad stavový kód -, môžeme namiesto toho vrátiť a ResponseEntity:
@PostMapping ("/") public ResponseEntity create (@RequestBody Student student) hodí URISyntaxException {Student createdStudent = service.create (student); if (createdStudent == null) {return ResponseEntity.notFound (). build (); } else {URI uri = ServletUriComponentsBuilder.fromCurrentRequest () .path ("/ {id}") .buildAndExpand (createdStudent.getId ()) .toUri (); návrat ResponseEntity.created (uri) .body (createdStudent); }}
Tu robíme oveľa viac než iba vrátenie vytvorených Študent v odpovedi. Okrem toho reagujeme sémanticky čistým stavom protokolu HTTP a v prípade úspešného vytvorenia identifikátorom URI nového zdroja.
4. Prečítajte si
Ako sme už spomínali, ak si chceme prečítať singel Študent, je významovejšie jasné vrátiť 404, ak študenta nenájdeme:
@GetMapping ("/ {id}") public ResponseEntity read (@PathVariable ("id") Long id) {Student foundStudent = service.read (id); if (foundStudent == null) {return ResponseEntity.notFound (). build (); } else {return ResponseEntity.ok (foundStudent); }}
Tu jasne vidíme rozdiel od nášho pôvodného čítať() implementácia.
Týmto spôsobom Študent objekt bude správne namapovaný na telo odpovede a súčasne sa vráti so správnym stavom.
5. Aktualizácia
Aktualizácia je veľmi podobná vytváraniu, ibaže je namapovaná na PUT namiesto POST a URI obsahuje id zdroja, ktorý aktualizujeme:
@PutMapping ("/ {id}") verejná aktualizácia ResponseEntity (@RequestBody študent Student, @PathVariable Long id) {Student updatedStudent = service.update (id, student); if (updatedStudent == null) {return ResponseEntity.notFound (). build (); } else {return ResponseEntity.ok (updatedStudent); }}
6. Odstrániť
Operácia mazania je mapovaná na metódu DELETE. URI obsahuje aj id zdroja:
@DeleteMapping ("/ {id}") public ResponseEntity deleteStudent (@PathVariable Long id) {service.delete (id); return ResponseEntity.noContent (). build (); }
Neimplementovali sme konkrétne spracovanie chýb, pretože odstrániť () metóda v skutočnosti zlyhá vyhodením súboru Výnimka.
7. Záver
V tomto článku sme videli, ako konzumovať a vyrábať obsah JSON v typickej službe CRUD REST vyvinutej pomocou Spring Boot. Ďalej sme demonštrovali, ako implementovať správnu kontrolu stavu odpovede a spracovanie chýb.
Aby sme to zjednodušili, tentokrát sme nešli do vytrvalosti, ale Spring Data REST poskytuje rýchly a efektívny spôsob vybudovania dátovej služby RESTful.
Celý zdrojový kód tohto príkladu je k dispozícii na GitHub.