如同常見的專案架構,Controller 作為 Spring Boot 應用程式中的 REST API 控制器,負責接收前端請求、呼叫 Service,並將結果回傳給前端。以 AIRecommendationController
為例:
@RestController
@RequestMapping("/api/recommendations")
@CrossOrigin(origins = "*")
public class AIRecommendationController {
@Autowired
private AIRecommendationService aiRecommendationService;
@Autowired
private UserPreferenceService userPreferenceService;
@Autowired
private BedrockAIService bedrockAIService;
@PostMapping("/generate")
public ResponseEntity<RecommendationResponse> generateRecommendation(
@Valid @RequestBody RecommendationRequest request) {
try {
RecommendationResponse response = aiRecommendationService.generateRecommendation(
request.getUserInput(), request.getUsername());
// 分析並更新使用者偏好(如果有使用者名稱)
System.out.println("Request Username: " + request.getUsername());
System.out.println("Response Recommendations: " + response.getRecommendations());
if (request.getUsername() != null && !request.getUsername().isEmpty() &&
response.getRecommendations() != null) {
List<String> recommendedDrinkNames = response.getRecommendations().stream()
.map(RecommendationResponse.DrinkRecommendation::getName)
.toList();
userPreferenceService.analyzeAndUpdatePreferences(
request.getUsername(), request.getUserInput(), recommendedDrinkNames);
}
return ResponseEntity.ok(response);
} catch (Exception e) {
return ResponseEntity.badRequest()
.body(RecommendationResponse.error("推薦生成失敗:" + e.getMessage()));
}
}
@GetMapping("/test")
public ResponseEntity<String> test() {
return ResponseEntity.ok("AI Recommendation API is working!");
}
@GetMapping("/service-status")
public ResponseEntity<Map<String, Object>> getServiceStatus() {
Map<String, Object> status = new HashMap<>();
status.put("serviceType", bedrockAIService.getCurrentServiceType());
status.put("isBedrockAvailable", bedrockAIService.isBedrockConfigured());
status.put("timestamp", java.time.LocalDateTime.now());
return ResponseEntity.ok(status);
}
}
主要結構説明:
@RestController
標註,表示回傳 JSON 格式資料,並以 /api/recommendations
為路徑前綴。@Autowired
注入三個 Service,分別負責 AI 推薦內容生成、使用者偏好分析、Bedrock AI 狀態查詢。generateRecommendation
方法處理前端 POST 請求,接收推薦請求資料,呼叫 AIRecommendationService
產生推薦結果。若有使用者名稱,則進一步呼叫 UserPreferenceService
分析並更新偏好。test
方法則提供 API 健康檢查,回傳簡單訊息。getServiceStatus
方法可以直接查詢 Bedrock AI 服務狀態,回傳目前服務型態、是否可用及時間戳記。如此一來,Controller 只要負責接收 HTTP 請求,將資料傳給 Service 處理,並將結果(或錯誤)包裝成 ResponseEntity 回傳前端,就能實現前後端分離的架構。