以下是一个基于 **Spring Boot** 框架的 **GET API** 实现,用于返回武汉五日游计划表的结构化数据。该 API 会返回一个包含行程安排、每日亮点、景点和注意事项的 JSON 响应。
---
### **1. 项目结构**
```
src/
├── main/
│ ├── java/
│ │ └── com.example.travelplan/
│ │ ├── TravelPlanApplication.java
│ │ ├── controller/TravelPlanController.java
│ │ └── model/TravelPlan.java
│ └── resources/
│ └── application.properties
```
---
### **2. 依赖配置(`pom.xml`)**
确保 `pom.xml` 中包含 Spring Boot 的 Web 依赖:
```xml
org.springframework.boot
spring-boot-starter-web
```
---
### **3. 数据模型(`TravelPlan.java`)**
```java
package com.example.travelplan.model;
import java.util.List;
public class TravelPlan {
private String title;
private String description;
private List days;
private List notes;
// Getters and Setters
public static class Day {
private int dayNumber;
private String date;
private String title;
private List highlights;
private List itinerary;
// Getters and Setters
}
// Getters and Setters
}
```
---
### **4. 控制器(`TravelPlanController.java`)**
```java
package com.example.travelplan.controller;
import com.example.travelplan.model.TravelPlan;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/api")
public class TravelPlanController {
@GetMapping("/travel-plan")
public TravelPlan getWuhanTravelPlan() {
TravelPlan plan = new TravelPlan();
plan.setTitle("武汉五日游计划");
plan.setDescription("涵盖历史、自然、美食与现代文化的深度体验");
// 初始化每日行程
List days = Arrays.asList(
createDay(1, "2023-10-01", "历史风情与江滩夜景",
Arrays.asList("古德寺", "黎黄陂路", "汉口江滩", "粮道街"),
Arrays.asList("上午:古德寺 → 山海关路 → 黎黄陂路 → 江汉路步行街",
"下午:汉口江滩 → 轮渡",
"晚上:粮道街夜市 → 昙华林")),
createDay(2, "2023-10-02", "人文与自然融合",
Arrays.asList("黄鹤楼", "长江大桥", "湖北省博物馆", "东湖绿道"),
Arrays.asList("上午:黄鹤楼 → 长江大桥",
"下午:湖北省博物馆 → 东湖绿道",
"晚上:楚河汉街")),
createDay(3, "2023-10-03", "学术与美食之旅",
Arrays.asList("武汉大学", "户部巷", "武昌江滩"),
Arrays.asList("上午:武汉大学 → 珞珈山",
"下午:湖北省博物馆 → 武昌江滩",
"晚上:户部巷小吃")),
createDay(4, "2023-10-04", "深度探索与夜景",
Arrays.asList("晴川阁", "琴台大剧院", "江汉关钟楼"),
Arrays.asList("上午:晴川阁 → 琴台大剧院 → 汉阳造创意园",
"晚上:江汉关夜景 → 吉庆街宵夜")),
createDay(5, "2023-10-05", "现代与怀旧交织",
Arrays.asList("光谷广场", "泰兴里", "水塔美食街"),
Arrays.asList("上午:光谷广场 → 武汉科技馆",
"下午:泰兴里 → 水塔美食街",
"返程"))
);
plan.setDays(days);
// 注意事项
plan.setNotes(Arrays.asList(
"提前预约黄鹤楼和湖北省博物馆",
"美食推荐:粮道街、水塔街、吉庆街",
"交通以地铁为主,轮渡体验长江风光"
));
return plan;
}
private TravelPlan.Day createDay(int dayNumber, String date, String title, List highlights, List itinerary) {
TravelPlan.Day day = new TravelPlan.Day();
day.setDayNumber(dayNumber);
day.setDate(date);
day.setTitle(title);
day.setHighlights(highlights);
day.setItinerary(itinerary);
return day;
}
}
```
---
### **5. 启动类(`TravelPlanApplication.java`)**
```java
package com.example.travelplan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TravelPlanApplication {
public static void main(String[] args) {
SpringApplication.run(TravelPlanApplication.class, args);
}
}
```
---
### **6. 测试 API**
启动项目后,访问以下 URL:
```
GET http://localhost:8080/api/travel-plan
```
**响应示例(JSON)**:
```json
{
"title": "武汉五日游计划",
"description": "涵盖历史、自然、美食与现代文化的深度体验",
"days": [
{
"dayNumber": 1,
"date": "2023-10-01",
"title": "历史风情与江滩夜景",
"highlights": ["古德寺", "黎黄陂路", "汉口江滩", "粮道街"],
"itinerary": [
"上午:古德寺 → 山海关路 → 黎黄陂路 → 江汉路步行街",
"下午:汉口江滩 → 轮渡",
"晚上:粮道街夜市 → 昙华林"
]
},
...
],
"notes": [
"提前预约黄鹤楼和湖北省博物馆",
"美食推荐:粮道街、水塔街、吉庆街",
"交通以地铁为主,轮渡体验长江风光"
]
}
```
---
### **7. 扩展建议**
- **数据持久化**:将行程数据存储在数据库(如 MySQL)中,通过 `@Repository` 动态加载。
- **动态参数**:支持通过查询参数(如 `?theme=history`)筛选不同主题的行程。
- **错误处理**:添加全局异常处理器(`@ControllerAdvice`)处理请求错误。
如果需要进一步集成数据库或实现其他功能,请告知!
评论区: