Tavaszi bakancs a JSON fogyasztásával és gyártásával

1. Áttekintés

Ebben az oktatóanyagban megmutatjuk hogyan lehet felépíteni egy REST szolgáltatást a JSON tartalom fogyasztására és előállítására a Spring Boot segítségével.

Megnézzük azt is, hogyan alkalmazhatjuk egyszerűen a RESTful HTTP szemantikát.

Az egyszerűség kedvéért nem fogunk tartóssági réteget felvenni, de a Spring Data ezt is egyszerűen hozzáadja.

2. REST szolgáltatás

A JSON REST szolgáltatás megírása a Spring Boot-ban egyszerű, mivel ez az alapértelmezett véleménye, amikor Jackson az osztályúton van:

@RestController @RequestMapping ("/ students") public class StudentController {@Autowired private StudentService szolgáltatás; @GetMapping ("/ {id}") public Student read (@PathVariable String id) {return service.find (id); } ... 

A mi kommentárjaival StudentController val vel @RestController, azt mondtuk a Spring Boot-nak, hogy írja meg a olvas módszer a reagálótesthez. Mivel nekünk is van egy @RequestMapping osztály szintjén, ugyanaz lenne minden további nyilvános módszerrel, amelyet hozzáadunk.

Bár egyszerű, e megközelítésből hiányzik a HTTP szemantika. Például mi történjen, ha nem találjuk meg a kért diákot? Ahelyett, hogy 200 vagy 500 állapotkódot adna vissza, érdemes egy 404-et visszaadni.

Vessünk egy pillantást arra, hogyan lehetne jobban kontrollálni magát a HTTP választ, és hozzáadhatunk néhány tipikus RESTful viselkedést a vezérlőnkhöz.

3. Hozzon létre

Ha a válaszon kívül a test egyéb aspektusait kell kontrollálnunk - például az állapotkódot -, akkor a-t adhatunk vissza ResponseEntity:

@ PostMapping ("/") public ResponseEntity create (@RequestBody Student hallgató) dobja az URISyntaxException {Student létrehozottStudent = service.create (hallgató); if (createdStudent == null) {return ResponseEntity.notFound (). build (); } else {URI uri = ServletUriComponentsBuilder.fromCurrentRequest () .path ("/ {id}") .buildAndExpand (createdStudent.getId ()) .toUri (); return ResponseEntity.created (uri) .body (createdStudent); }} 

Itt sokkal többet teszünk, mint hogy csak a létrehozottakat visszaküldjük Diák válaszában. Ezenkívül szemantikailag tiszta HTTP-státusszal, és ha a létrehozás sikerült, URI-val válaszolunk az új erőforrásra.

4. Olvassa el

Mint korábban említettük, ha egy kislemezt akarunk elolvasni Diák, szemantikailag egyértelműbb, ha 404-et adunk vissza, ha nem találjuk meg a hallgatót:

@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); }} 

Itt egyértelműen láthatjuk a különbséget a kezdeti értékkel szemben olvas() végrehajtás.

Így a Diák Az objektumot megfelelő módon hozzárendelik a válasz testhez, és egyidejűleg megfelelő státusszal visszaküldik.

5. Frissítés

A frissítés nagyon hasonló a létrehozáshoz, azzal a különbséggel, hogy a POST helyett a PUT-hoz van hozzárendelve, az URI pedig egy id az erőforrás frissítése:

@PutMapping ("/ {id}") nyilvános ResponseEntity frissítés (@RequestBody Student hallgató, @PathVariable Long id) {Student updatedStudent = service.update (id, hallgató); if (updatedStudent == null) {return ResponseEntity.notFound (). build (); } else {return ResponseEntity.ok (updatedStudent); }} 

6. Törlés

A törlési művelet a DELETE módszerhez van hozzárendelve. Az URI tartalmazza a id az erőforrás:

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

Nem valósítottunk meg konkrét hibakezelést, mert a töröl() módszer valójában kudarcot vall egy Kivétel.

7. Következtetés

Ebben a cikkben láttuk, hogyan lehet JSON-tartalmat fogyasztani és előállítani egy tipikus CRUD REST szolgáltatásban, amelyet egy Spring Boot segítségével fejlesztettek ki. Emellett bemutattuk a megfelelő válaszállapot-ellenőrzés és a hibakezelés megvalósítását.

A dolgok egyszerűsége érdekében ezúttal nem folytattuk a kitartást, de a Spring Data REST gyors és hatékony módszert kínál a RESTful adatszolgáltatás kiépítésére.

A példa teljes forráskódja elérhető a GitHub oldalon.