知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 消費和生產 JSON 數據

JSON,Spring Boot
HongKong
6
09:53 PM · Dec 05 ,2025

1. 概述

在本教程中,我們將演示如何使用 Spring Boot 構建一個 REST 服務,用於消費和生產 JSON 內容。

我們還將瞭解如何輕鬆地採用 RESTful HTTP 語義。

為了簡化起見,我們不會包含持久化層,但 Spring Data 也能輕鬆地添加。

2. REST 服務

在 Spring Boot 中編寫 JSON REST 服務非常簡單,因為 Jackson 在 classpath 上時,這正是其默認觀點:

@RestController
@RequestMapping("/students")
public class StudentController {

    private final StudentService service;

    public StudentController(StudentService service) {
        this.service = service;
    }

    @GetMapping("/{id}")
    public Student read(@PathVariable(name = "id) String id) {
        return service.find(id);
    }

...

通過為我們的StudentController註解了@RestController我們告訴 Spring Boot 將read 方法的返回值寫入響應體。由於我們還具有在類級別上使用@RequestMapping,因此任何我們添加的公共方法都將適用。

雖然簡單,這種方法缺乏 HTTP 語義。例如,如果未找到請求的學生,我們是否希望返回 404 狀態碼而不是 200 或 500 狀態碼?

讓我們看看如何獲得對 HTTP 響應的更多控制,並向我們的控制器添加一些典型的 RESTful 行為。

3. 創建

當我們需要控制響應的各個方面,除了響應體之外,例如狀態碼時,我們可以返回一個 ResponseEntity

@PostMapping("/")
public ResponseEntity<Student> 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);
    }
}

在這裏,我們不僅返回創建的 Student 對象,而且還會返回一個語義明確的 HTTP 狀態碼,如果創建成功,還會提供指向新資源的 URI。

4. 讀取

正如之前提到的,如果我們想要讀取單個 學生,如果找不到該學生,返回 404 狀態碼更具語義清晰度:

@GetMapping("/{id}")
public ResponseEntity<Student> read(@PathVariable(name = "id") Long id) {
    Student foundStudent = service.read(id);
    if (foundStudent == null) {
        return ResponseEntity.notFound().build();
    } else {
        return ResponseEntity.ok(foundStudent);
    }
}

在這裏,我們可以清楚地看到與我們最初的 read() 實現的不同。

這種方式,Student 對象將被正確地映射到響應體中,並同時返回正確的狀態碼。

5. 更新

更新與創建非常相似,但映射到 PUT 請求,而不是 POST 請求,並且 URI 包含資源的 標識符:

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

6. 刪除

刪除操作映射到 DELETE 方法。 URI 還包含資源的

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

我們沒有實現特定的錯誤處理,因為 delete() 方法實際上是通過拋出 Exception 來實現的。

7. 結論

在本文中,我們學習瞭如何在典型的 Spring Boot 開發的 CRUD REST 服務中消費和生產 JSON 內容。此外,我們還演示瞭如何實現適當的響應狀態控制和錯誤處理。

為了保持簡單,我們沒有涉及持久化這一部分,但 Spring Data REST 提供了一種快速高效的方式來構建 RESTful 數據服務。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.