在請 AI 寫 Code 前,基礎建設必須自己打底。這次選用穩定且在長期支援週期內的 Java 21 LTS。底層環境由自己建置,可以避免未來碰到「IntelliJ 用 Java 21,Terminal 卻跑 Java 17」這種讓 AI 也難以通靈的情況。
JDK 是 Java Development Kit 的縮寫,是用來開發、編譯與執行 Java 程式的工具套件。以下操作都會以 macOS 為範例。
~/.zshrc 中:# 清除舊的 JAVA_HOME 設定
unset JAVA_HOME
# 指向已安裝的 JDK 21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
# 將 Java 21 放到 PATH 最前面
export PATH=$JAVA_HOME/bin:$PATH
設定後執行 source ~/.zshrc 後,輸入 java -version 確認是否成功顯示 java version "21.0.x"。
takuya@Takuya-MacBook-Pro ~ % java -version
java version "21.0.12" 2026-07-21 LTS
Java(TM) SE Runtime Environment (build 21.0.12+7-LTS-205)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.12+7-LTS-205, mixed mode, sharing)
Project Structure,確認 Project SDK 與 Language level 都設定為 Java 21。
有了穩固的 Java 21 加上 Spring Boot 3 環境,我們就可以召喚 AI 了!
不要只對 AI 說「幫我寫一個 API」,否則它容易把 HTTP 請求、商業邏輯、資料處理全塞在同一個 Controller,最終變成難以維護的義大利麵條程式碼。
因此,我們在與 AI 互動時,也應該明確要求它遵守分層架構(Layered Architecture),而不是把所有邏輯都塞進 Controller。
「我要建立一個 Java 21 + Spring Boot 3 的專案。請幫我生成一個測試用的 RESTful API,例如 /api/v1/hello,並支援接收 query parameter,例如 name。請遵守分層架構,將 HTTP 請求處理放在 Controller,商業邏輯放在 Service,不要把商業邏輯直接寫在 Controller 裡。」
產出結果與責任分工:
HelloController):職責極度單純,僅負責接收 HTTP Request ➔ 取得 name 參數 ➔ 呼叫 Service ➔ 回傳 HTTP Response。HelloService):負責真正的商業邏輯,例如判斷參數是否為空、組合字串並產生 HelloResponse。很快地,AI 就會為產生分層結構:
@RestController
@RequestMapping("/test")
public class HelloController {
private final HelloService helloService;
public HelloController(HelloService helloService) {
this.helloService = helloService;
}
@GetMapping("/hello")
public ResponseEntity<HelloResponse> sayHello(@RequestParam(value = "name", required = false) String name) {
HelloResponse response = helloService.getGreeting(name);
return ResponseEntity.ok(response);
}
}
@Service
public class HelloServiceImpl implements HelloService {
@Override
public HelloResponse getGreeting(String name) {
String displayName = (name != null && !name.isBlank()) ? name : "World";
String message = String.format("Hello, %s! Welcome to Spring Boot 3 + Java 21 REST API.", displayName);
return new HelloResponse(message, LocalDateTime.now());
}
}
我們今天教 AI 的不是單純「幫我寫 Code」,而是「按照我的架構規則寫 Code」。
HTTP Request ➔ Controller ➔ Service ➔ Business Logic。@SpringBootApplication 的主程式,點擊 Run。若 Log 顯示 Tomcat started on port 8080 即代表啟動成功。request:GET http://localhost:8080/test/hello?name=Takuya
message 與 timestamp 的 JSON 格式,代表從 Request 到 Response 的整條架構流程已成功打通。
看到我們帶入 name=Takuya 的參數後,API 回傳了 Hello, Takuya! Welcome to Spring Boot 3 + Java 21 REST API. 的 JSON 格式與 Timestamp,到這邊也完成了一個API的初步開發!
享受Antigrativy開發的同時,有個本地端實作常踩的坑要注意:
Project Structure 中,確認 Project SDK 與 Language level 都有確實切換到 21!今天我們親自完成了 Java 21 的環境配置,並驗證了 AI 的開發模式:利用 AI 快速建構符合分層架構規範的 Spring Boot 專案,最後在本地端用 Postman 成功打通了 API。這證明我們的架構地基已經完美打穩了。
既然地基有了,我們就可以把靈魂注入進去了!
明天(Day 7),我們將進入核心重頭戲:在後端實作 Gemini API 的 HTTP Client 呼叫。我們會利用今天提到的 Service 層,正式與 Google 的 AI 大腦進行第一次連線,敬請期待!