Spring Boot Konsumieren und Produzieren von JSON

1. Übersicht

In diesem Tutorial zeigen wir, wie Sie einen REST-Service erstellen, um JSON-Inhalte mit Spring Boot zu nutzen und zu produzieren .

Wir werden uns auch ansehen, wie wir die RESTful HTTP-Semantik einfach einsetzen können.

Der Einfachheit halber wird keine Persistenzschicht eingefügt, aber Spring Data vereinfacht auch das Hinzufügen.

2. REST-Service

Das Schreiben eines JSON-REST-Dienstes in Spring Boot ist einfach, da dies die Standardmeinung ist, wenn Jackson sich im Klassenpfad befindet:

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

Durch Kommentierung unserer StudentController mit @RestController , haben wir Frühling Stiefel sagten den Rückgabetyp der schreiben Leseverfahren zu dem Antworttext. Da wir auch ein @RequestMapping auf Klassenebene haben , ist es für alle weiteren öffentlichen Methoden, die wir hinzufügen, dasselbe.

Obwohl dieser Ansatz einfach ist, fehlt ihm die HTTP-Semantik. Was soll zum Beispiel passieren, wenn wir den gewünschten Schüler nicht finden? Anstatt einen 200- oder 500-Statuscode zurückzugeben, möchten wir möglicherweise einen 404 zurückgeben.

Lassen Sie uns einen Blick darauf werfen, wie Sie mehr Kontrolle über die HTTP-Antwort selbst erlangen und unserem Controller einige typische RESTful-Verhaltensweisen hinzufügen können.

3. Erstellen

Wenn wir andere Aspekte der Antwort als den Text steuern müssen - wie den Statuscode - können wir stattdessen eine ResponseEntity zurückgeben :

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

Hier tun wir viel mehr als nur den erstellten Schüler in der Antwort zurückzugeben. Zusätzlich antworten wir mit einem semantisch eindeutigen HTTP-Status und, falls die Erstellung erfolgreich war, einem URI für die neue Ressource.

4. Lesen

Wie bereits erwähnt , ist es semantisch klarer , wenn wir einen einzelnen Schüler lesen möchten, einen 404 zurückzugeben, wenn wir den Schüler nicht finden können:

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

Hier können wir den Unterschied zu unserer anfänglichen Implementierung von read () deutlich erkennen .

Auf diese Weise wird das Student- Objekt ordnungsgemäß dem Antworttext zugeordnet und gleichzeitig mit einem ordnungsgemäßen Status zurückgegeben.

5. Aktualisieren

Das Aktualisieren ist der Erstellung sehr ähnlich, außer dass es PUT anstelle von POST zugeordnet ist und der URI eine ID der Ressource enthält, die wir aktualisieren:

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

6. Löschen

Der Löschvorgang wird der DELETE-Methode zugeordnet. URI enthält auch die ID der Ressource:

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

Wir haben keine spezifische Fehlerbehandlung implementiert, da die delete () -Methode tatsächlich durch Auslösen einer Ausnahme fehlschlägt .

7. Fazit

In diesem Artikel haben wir gesehen, wie JSON-Inhalte in einem typischen CRUD REST-Service verwendet und produziert werden, der mit einem Spring Boot entwickelt wurde. Darüber hinaus haben wir gezeigt, wie die ordnungsgemäße Steuerung des Antwortstatus und die Fehlerbehandlung implementiert werden.

Um die Dinge einfach zu halten, haben wir diesmal nicht auf Persistenz geachtet, aber Spring Data REST bietet eine schnelle und effiziente Möglichkeit, einen RESTful-Datendienst aufzubauen.

Der vollständige Quellcode für das Beispiel ist auf GitHub verfügbar.