Spring Boot verbruikt en produceert JSON

1. Overzicht

In deze tutorial laten we zien hoe je een REST-service bouwt om JSON-inhoud te consumeren en te produceren met Spring Boot.

We zullen ook bekijken hoe we gemakkelijk RESTful HTTP-semantiek kunnen gebruiken.

Voor de eenvoud voegen we geen persistentielaag toe, maar Spring Data maakt deze ook eenvoudig toe te voegen.

2. REST-service

Het schrijven van een JSON REST-service in Spring Boot is eenvoudig, want dat is de standaard mening wanneer Jackson zich op het klassenpad bevindt:

@RestController @RequestMapping ("/ students") openbare klas StudentController {@Autowired privé StudentService-service; @GetMapping ("/ {id}") openbaar Student lezen (@PathVariable String id) {return service.find (id); } ... 

Door onze StudentController met @RestController, we hebben Spring Boot verteld om het retourtype van het lezen methode aan het antwoordorgaan. Omdat we ook een @RequestMapping op klasniveau, zou het hetzelfde zijn voor alle meer openbare methoden die we toevoegen.

Hoewel eenvoudig, deze benadering mist HTTP-semantiek. Wat moet er bijvoorbeeld gebeuren als we de gevraagde student niet vinden? In plaats van een statuscode van 200 of 500 te retourneren, willen we misschien een 404 retourneren.

Laten we eens kijken hoe we meer controle over de HTTP-respons zelf kunnen krijgen en op hun beurt wat typisch RESTful-gedrag aan onze controller kunnen toevoegen.

3. Creëer

Als we andere aspecten van het antwoord dan de hoofdtekst moeten controleren - zoals de statuscode - kunnen we in plaats daarvan een ResponseEntity:

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

Hier doen we veel meer dan alleen het gemaakte teruggeven Leerling in de reactie. Bovendien reageren we met een semantisch duidelijke HTTP-status en, als het maken is gelukt, een URI naar de nieuwe bron.

4. Lees

Zoals eerder vermeld, als we er een willen lezen Leerling, is het semantisch duidelijker om een ​​404 te retourneren als we de student niet kunnen vinden:

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

Hier kunnen we duidelijk het verschil zien met onze initiaal lezen() implementatie.

Op deze manier is het Leerling object wordt correct toegewezen aan de responsbody en tegelijkertijd met de juiste status geretourneerd.

5. Bijwerken

Updaten lijkt erg op creëren, behalve dat het is toegewezen aan PUT in plaats van POST, en URI een ID kaart van de bron die we updaten:

@PutMapping ("/ {id}") openbare ResponseEntity-update (@RequestBody Student student, @PathVariable Lange id) {Student updatedStudent = service.update (id, student); if (updatedStudent == null) {return ResponseEntity.notFound (). build (); } else {return ResponseEntity.ok (updatedStudent); }} 

6. Verwijderen

De verwijderingsbewerking wordt toegewezen aan de DELETE-methode. URI bevat ook de ID kaart van de bron:

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

We hebben geen specifieke foutafhandeling geïmplementeerd, omdat de verwijderen () methode mislukt eigenlijk door een Uitzondering.

7. Conclusie

In dit artikel hebben we gezien hoe we JSON-inhoud kunnen consumeren en produceren in een typische CRUD REST-service die is ontwikkeld met een Spring Boot. Bovendien hebben we gedemonstreerd hoe u de juiste controle van de reactiestatus en foutafhandeling implementeert.

Om het simpel te houden, zijn we deze keer niet in volharding ingegaan, maar Spring Data REST biedt een snelle en efficiënte manier om een ​​RESTful-gegevensservice te bouwen.

De volledige broncode voor het voorbeeld is beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found