這篇文章是照著官方教學(英文)做的。

1. 創建專案

使用Spring Initializr創建專案,並增加Spring Web至dependencies。此步驟也有其他方法,但在這邊不贅述。

2. 建立Resource Representation Class

為了得到像下面這樣子的JSON回應,我們會先建立具有fields、constructors、accessors的Java物件,之後讓資料做使用。

1
2
3
4
{
"id": 1,
"content": "Hello, World!"
}

於是我們會新增java class,定義Greeting這個class的內容,路徑是
src/main/java/com/example/restservice/Greeting.java,並撰寫:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.restservice;

public class Greeting {

private final long id;
private final String content;

public Greeting(long id, String content) {
this.id = id;
this.content = content;
}

public long getId() {
return id;
}

public String getContent() {
return content;
}
}

3. 建立Resource Controller

這裡的Controller是讓專案跑起來之後,可以在 localhost:8000/greeting 看到GET request之後產生的Greeting class instance。
這個Controller的檔案名稱會是GreetingController,並放在
src/main/java/com/example/restservice/GreetingController.java。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.restservice;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}

Annotations

  • @RestController
  • @GetMapping(“/greeting)
    註:@PostMapping,或@RequestMapping(method=POST)
  • @RequestParam

4. 測試

啟動專案之後,前往 http://localhost:8080/greeting 查看結果。
http://localhost:8080/greeting?name=替換名字 可以看到不同的Hello, Name!