Spring Boot Consommer et produire du JSON

1. Vue d'ensemble

Dans ce didacticiel, nous montrerons comment créer un service REST pour consommer et produire du contenu JSON avec Spring Boot .

Nous verrons également comment nous pouvons facilement utiliser la sémantique HTTP RESTful.

Pour plus de simplicité, nous n'inclurons pas de couche de persistance, mais Spring Data facilite également l'ajout.

2. Service REST

L'écriture d'un service JSON REST dans Spring Boot est simple, car c'est son opinion par défaut lorsque Jackson est sur le chemin de classe:

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

En annotant notre StudentController avec @RestController , nous avons demandé à Spring Boot d'écrire le type de retour de la méthode de lecture dans le corps de la réponse. Puisque nous avons également un @RequestMapping au niveau de la classe , ce serait la même chose pour toutes les méthodes publiques que nous ajoutons.

Bien que simple, cette approche manque de sémantique HTTP. Par exemple, que devrait-il se passer si nous ne trouvons pas l'étudiant recherché? Au lieu de renvoyer un code de statut 200 ou 500, nous pourrions vouloir renvoyer un 404.

Voyons comment obtenir plus de contrôle sur la réponse HTTP elle-même et, à son tour, ajoutons des comportements RESTful typiques à notre contrôleur.

3. Créer

Lorsque nous devons contrôler des aspects de la réponse autres que le corps - comme le code d'état - nous pouvons à la place retourner un ResponseEntity :

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

Ici, nous faisons bien plus que simplement renvoyer l' étudiant créé dans la réponse. De plus, nous répondons avec un statut HTTP sémantiquement clair et, si la création a réussi, un URI vers la nouvelle ressource.

4. Lire

Comme mentionné précédemment, si nous voulons lire un seul étudiant , il est plus sémantiquement clair de renvoyer un 404 si nous ne pouvons pas trouver l'étudiant:

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

Ici, nous pouvons clairement voir la différence avec notre implémentation initiale read () .

De cette façon, l' objet Student sera correctement mappé au corps de la réponse et renvoyé avec un statut approprié en même temps.

5. Mettre à jour

La mise à jour est très similaire à la création, sauf qu'elle est mappée sur PUT au lieu de POST, et l'URI contient un identifiant de la ressource que nous mettons à jour:

@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. Supprimer

L'opération de suppression est mappée à la méthode DELETE. L'URI contient également l' id de la ressource:

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

Nous n'avons pas implémenté de gestion d'erreur spécifique, car la méthode delete () échoue en lançant une exception.

7. Conclusion

Dans cet article, nous avons vu comment consommer et produire du contenu JSON dans un service CRUD REST typique développé avec un Spring Boot. De plus, nous avons montré comment mettre en œuvre un contrôle de l'état des réponses et une gestion des erreurs appropriés.

Pour simplifier les choses, nous ne sommes pas allés dans la persistance cette fois, mais Spring Data REST fournit un moyen rapide et efficace de créer un service de données RESTful.

Le code source complet de l'exemple est disponible à l'adresse over sur GitHub.