Spring Boot Mengkonsumsi dan Memproduksi JSON

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan cara membuat layanan REST untuk menggunakan dan menghasilkan konten JSON dengan Spring Boot .

Kami juga akan melihat bagaimana kami dapat dengan mudah menggunakan semantik HTTP RESTful.

Untuk kesederhanaan, kami tidak akan menyertakan lapisan persistensi, tetapi Spring Data juga membuatnya mudah untuk ditambahkan.

2. Layanan REST

Menulis layanan JSON REST di Spring Boot itu sederhana, karena itulah pendapat defaultnya saat Jackson berada di classpath:

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

Dengan memberi anotasi StudentController kami dengan @RestController , kami telah memberi tahu Spring Boot untuk menulis tipe kembalian dari metode baca ke isi respons. Karena kami juga memiliki @RequestMapping di tingkat kelas , itu akan sama untuk metode publik lainnya yang kami tambahkan.

Meskipun sederhana, pendekatan ini tidak memiliki semantik HTTP. Misalnya, apa yang akan terjadi jika kita tidak menemukan siswa yang diminta? Alih-alih mengembalikan kode status 200 atau 500, kami mungkin ingin mengembalikan 404.

Mari kita lihat bagaimana mendapatkan lebih banyak kendali atas respons HTTP itu sendiri dan pada gilirannya menambahkan beberapa perilaku RESTful yang khas ke pengontrol kami.

3. Buat

Saat kita perlu mengontrol aspek respons selain body - seperti kode status - kita dapat mengembalikan 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); } } 

Di sini, kami melakukan lebih dari sekadar mengembalikan Siswa yang dibuat sebagai tanggapan. Selain itu, kami menanggapi dengan status HTTP yang jelas secara semantik dan, jika pembuatan berhasil, URI ke sumber daya baru.

4. Membaca

Seperti disebutkan sebelumnya, jika kita ingin membaca satu Siswa , akan lebih jelas secara semantik untuk mengembalikan 404 jika kita tidak dapat menemukan siswa tersebut:

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

Di sini, kita dapat dengan jelas melihat perbedaan dari implementasi read () awal kita .

Dengan cara ini, objek Siswa akan dipetakan dengan benar ke badan respons dan dikembalikan dengan status yang sesuai pada waktu yang sama.

5. Perbarui

Pembaruan sangat mirip dengan pembuatan, kecuali itu dipetakan ke PUT dan bukan POST, dan URI berisi id dari sumber daya yang kita perbarui:

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

Operasi penghapusan dipetakan ke metode DELETE. URI juga berisi id sumber daya:

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

Kami tidak mengimplementasikan penanganan error tertentu, karena metode delete () sebenarnya gagal dengan menampilkan Exception.

7. Kesimpulan

Dalam artikel ini, kami melihat cara mengonsumsi dan memproduksi konten JSON dalam layanan CRUD REST tipikal yang dikembangkan dengan Spring Boot. Selain itu, kami mendemonstrasikan cara menerapkan kontrol status respons dan penanganan error yang tepat.

Untuk menyederhanakannya, kali ini kami tidak melakukan ketekunan, tetapi Spring Data REST menyediakan cara cepat dan efisien untuk membangun layanan data RESTful.

Kode sumber lengkap untuk contoh tersedia di GitHub.