首先,我们需要创建一个 Spring Boot 项目,然后添加必要的依赖项和配置。假设你已经有了一个名为 FoodTruckAPI
的项目,我们将在该项目中实现获取 CSV 数据的功能。
-
创建一个 Spring Boot 项目:
spring init --name=FoodTruckAPI --groupId=com.example --artifactId=FoodTruckAPI --dependencies=web,data-jpa FoodTruckAPI
进入项目目录,并创建一个名为
FoodTruckService.java
的服务类,用于处理 CSV 数据:
package com.example.FoodTruckAPI.service;
import com.example.FoodTruckAPI.model.FoodTruck;
import org.springframework.stereotype.Service;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
@Service
public class FoodTruckService {
public List<FoodTruck> getFoodTrucksFromCSV(InputStream inputStream) {
List<FoodTruck> foodTrucks = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
boolean skipHeader = true;
while ((line = br.readLine()) != null) {
if (skipHeader) {
skipHeader = false;
continue;
}
String[] data = line.split(",");
FoodTruck foodTruck = new FoodTruck(data[0], data[1], data[2]); // 假设 CSV 中的列依次是名称、类型、地址
foodTrucks.add(foodTruck);
}
} catch (Exception e) {
e.printStackTrace();
}
return foodTrucks;
}
}
创建一个名为 FoodTruckController.java
的控制器类,用于暴露获取 CSV 数据的接口:
package com.example.FoodTruckAPI.controller;
import com.example.FoodTruckAPI.model.FoodTruck;
import com.example.FoodTruckAPI.service.FoodTruckService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@RestController
@RequestMapping("/food-trucks")
public class FoodTruckController {
@Autowired
private FoodTruckService foodTruckService;
@GetMapping
public ResponseEntity<List<FoodTruck>> getAllFoodTrucks() {
Resource resource = new ClassPathResource("food-trucks.csv");
try (InputStream inputStream = resource.getInputStream()) {
List<FoodTruck> foodTrucks = foodTruckService.getFoodTrucksFromCSV(inputStream);
return ResponseEntity.ok(foodTrucks);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(500).build();
}
}
}
创建一个名为 FoodTruck.java
的模型类,用于表示食品卡车数据:
package com.example.FoodTruckAPI.model;
public class FoodTruck {
private String name;
private String type;
private String address;
public FoodTruck() {
}
public FoodTruck(String name, String type, String address) {
this.name = name;
this.type = type;
this.address = address;
}
// Getters and setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
-
将 CSV 文件
food-trucks.csv
放在src/main/resources
目录下,并填写一些示例数据。 -
编写 Dockerfile 用于 Docker 容器化应用:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/FoodTruckAPI-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
构建 Docker 镜像并运行容器:
docker build -t food-truck-api .
docker run -p 8080:8080 food-truck-api
现在,你的 Spring Boot 项目已经可以从 CSV 文件中读取数据,并通过 API 提供给外部使用了。你可以通过访问 http://localhost:8080/food-trucks
来查看获取的食品卡车数据。请确保你的系统中安装了 Docker 和 Java 环境,以便顺利运行该项目。
整体目录结构如下:
FoodTruckAPI
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── FoodTruckAPI
│ │ │ ├── controller
│ │ │ │ └── FoodTruckController.java
│ │ │ ├── model
│ │ │ │ └── FoodTruck.java
│ │ │ └── service
│ │ │ └── FoodTruckService.java
│ │ └── resources
│ │ └── food-trucks.csv
│ └── test
│ └── java
└── Dockerfile