Spring Boot Mengkonsumsi dan Menghasilkan JSON

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara membina perkhidmatan REST untuk menggunakan dan menghasilkan kandungan JSON dengan Spring Boot .

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

Untuk kesederhanaan, kami tidak akan memasukkan lapisan ketekunan, tetapi Spring Data menjadikannya mudah untuk ditambahkan juga.

2. Perkhidmatan REST

Menulis perkhidmatan JSON REST di Spring Boot adalah mudah, kerana itulah pendapat lalai ketika Jackson berada di lorong kelas:

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

Dengan memberi keterangan kepada StudentController kami dengan @RestController , kami telah memberitahu Spring Boot untuk menuliskan jenis pengembalian kaedah baca ke badan respons. Oleh kerana kami juga mempunyai @RequestMapping di peringkat kelas , akan sama dengan kaedah awam yang kami tambahkan.

Walaupun sederhana, pendekatan ini tidak mempunyai semantik HTTP. Sebagai contoh, apa yang harus berlaku sekiranya kita tidak menemui pelajar yang diminta? Daripada mengembalikan kod status 200 atau 500, kami mungkin ingin mengembalikan 404.

Mari kita lihat bagaimana cara untuk mendapatkan lebih banyak kawalan terhadap tindak balas HTTP itu sendiri dan seterusnya menambahkan beberapa tingkah laku RESTful khas untuk pengawal kami.

3. Buat

Apabila kita perlu mengawal aspek tindak balas selain isi - seperti kod status - kita sebaliknya 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 daripada sekadar mengembalikan Pelajar yang dibuat sebagai tindak balas. Selain itu, kami bertindak balas dengan status HTTP yang semantik dan, jika penciptaan berjaya, URI ke sumber baru.

4. Baca

Seperti yang telah disebutkan sebelumnya, jika kita ingin membaca Pelajar tunggal , lebih jelas semantiknya untuk mengembalikan 404 jika kita tidak dapat menemui pelajar:

@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 melihat dengan jelas perbezaan dari pelaksanaan pembacaan awal () kita .

Dengan cara ini objek Pelajar akan dipetakan dengan betul ke badan tindak balas dan dikembalikan dengan status yang betul pada masa yang sama.

5. Kemas kini

Mengemas kini sangat serupa dengan penciptaan, kecuali dipetakan ke PUT dan bukannya POST, dan URI mengandungi id sumber yang kami kemas kini:

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

Operasi hapus dipetakan ke kaedah DELETE. URI juga mengandungi id sumber:

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

Kami tidak melaksanakan pengendalian ralat tertentu, kerana kaedah delete () sebenarnya gagal dengan membuang Exception.

7. Kesimpulannya

Dalam artikel ini, kami melihat bagaimana mengkonsumsi dan menghasilkan kandungan JSON dalam perkhidmatan CRUD REST khas yang dikembangkan dengan Spring Boot. Selain itu, kami menunjukkan cara melaksanakan kawalan status respons dan pengendalian ralat yang betul.

Untuk memastikan perkara-perkara sederhana, kami tidak bertahan lama kali ini, tetapi Spring Data REST menyediakan cara cepat dan cekap untuk membina perkhidmatan data RESTful.

Kod sumber lengkap untuk contoh boleh didapati di GitHub.