Proljetna čizma Potrošnja i proizvodnja JSON-a

1. Pregled

U ovom uputstvu ćemo pokazati kako izgraditi REST uslugu za konzumiranje i stvaranje JSON sadržaja s Spring Boot-om.

Također ćemo pogledati kako možemo lako upotrijebiti RESTful HTTP semantiku.

Radi jednostavnosti, nećemo uključiti sloj postojanosti, ali Spring Data i ovo čini jednostavnim za dodavanje.

2. ODMORNA usluga

Pisanje JSON REST usluge u Spring Boot je jednostavno, jer je to njegovo zadano mišljenje kada je Jackson na putu predavanja:

@RestController @RequestMapping ("/ students") javna klasa StudentController {@Autowired privatna usluga StudentService; @GetMapping ("/ {id}") javno čitanje učenika (@PathVariable String id) {return service.find (id); } ... 

Označavanjem naših StudentController s @RestController, rekli smo Spring Bootu da napiše povratni tip čitati metoda odgovornom tijelu. Budući da imamo i @RequestMapping na razini razreda, bilo bi isto za sve javne metode koje dodamo.

Iako jednostavan, ovom pristupu nedostaje HTTP semantika. Na primjer, što bi se trebalo dogoditi ako ne pronađemo traženog učenika? Umjesto vraćanja statusnog koda 200 ili 500, možda bismo htjeli vratiti 404.

Pogledajmo kako zadobiti veću kontrolu nad samim HTTP odgovorom i zauzvrat dodamo neka tipična RESTful ponašanja našem kontroloru.

3. Stvori

Kada trebamo kontrolirati aspekte odgovora osim tijela - poput statusnog koda - možemo umjesto toga vratiti a ResponseEntity:

@PostMapping ("/") javni ResponseEntity create (@RequestBody Student student) baca URISyntaxException {Student createdStudent = service.create (student); if (createdStudent == null) {return ResponseEntity.notFound (). build (); } else {URI uri = ServletUriComponentsBuilder.fromCurrentRequest () .path ("/ {id}") .buildAndExpand (createdStudent.getId ()) .toUri (); vratiti ResponseEntity.created (uri) .body (createdStudent); }} 

Ovdje radimo puno više od pukog vraćanja stvorenog Student u odgovoru. Uz to, odgovaramo semantički jasnim HTTP statusom i, ako je izrada uspjela, URI na novi resurs.

4. Pročitajte

Kao što je već spomenuto, ako želimo pročitati jedan singl Student, semantički je jasnije vratiti 404 ako ne možemo pronaći učenika:

@GetMapping ("/ {id}") javni ResponseEntity read (@PathVariable ("id") Long id) {Student foundStudent = service.read (id); if (foundStudent == null) {return ResponseEntity.notFound (). build (); } else {povratak ResponseEntity.ok (foundStudent); }} 

Ovdje možemo jasno vidjeti razliku od našeg početnog čitati() provedba.

Ovim putem Student objekt će biti pravilno mapiran u tijelo odgovora i istodobno vraćen s ispravnim statusom.

5. Ažuriranje

Ažuriranje je vrlo slično stvaranju, osim što se preslikava na PUT umjesto POST, a URI sadrži iskaznica resursa koji ažuriramo:

@PutMapping ("/ {id}") javno ažuriranje ResponseEntity (@RequestBody Student student, @PathVariable Long id) {Student updatedStudent = service.update (id, student); if (updatedStudent == null) {return ResponseEntity.notFound (). build (); } else {povratak ResponseEntity.ok (updatedStudent); }} 

6. Izbriši

Operacija brisanja preslikava se na metodu DELETE. URI također sadrži iskaznica resursa:

@DeleteMapping ("/ {id}") javni ResponseEntity deleteStudent (@PathVariable Long id) {service.delete (id); vratiti ResponseEntity.noContent (). build (); } 

Nismo implementirali određeno rukovanje pogreškama jer izbrisati() metoda zapravo ne uspije bacajući Iznimka.

7. Zaključak

U ovom smo članku vidjeli kako konzumirati i proizvesti JSON sadržaj u tipičnoj usluzi CRUD REST razvijenoj pomoću Spring Boot. Pored toga, pokazali smo kako primijeniti pravilnu kontrolu statusa odgovora i rukovanje pogreškama.

Da stvari budu jednostavne, ovaj put nismo ustrajali, ali Spring Data REST pruža brz i učinkovit način za izgradnju RESTful podatkovne usluge.

Kompletni izvorni kod za primjer dostupan je na GitHubu.