Gun*_*eet 10 csv upload file spring-boot
例如,我有一个用户实体,包括用户名,电话号码和地址.我想从csv文件中读取所有这些字段并将其存储在数据库中的相应表中?
任何人都可以通过描述如何做到这一点来帮助我吗?或者有没有关于如何做到这一点的文件?
Ser*_*scu 25
我假设您希望用户从某个UI上传文件.根据您构建UI的确切方式,您可能:
使用Spring可以很容易地解决这两个问题中的任何一个问题.
假设我们有以下实体:
@Data
@Entity
public class User {
@Id
private String username;
private String phoneNumber;
private String address;
}
Run Code Online (Sandbox Code Playgroud)
我们定义了一个Spring Data存储库来访问数据库:
public interface UserRepository extends Repository<User, String> {
void saveAll(List<User> users);
}
Run Code Online (Sandbox Code Playgroud)
对于CSV反序列化,我建议使用Jackson.Spring Boot已经附带了Spring,但我们需要在你的pom中添加CSV的数据格式扩展:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这样,我们就可以创建一个简单的实用程序方法,它知道为给定的POJO类读取CSV:
public class CsvUtils {
private static final CsvMapper mapper = new CsvMapper();
public static <T> List<T> read(Class<T> clazz, InputStream stream) throws IOException {
CsvSchema schema = mapper.schemaFor(clazz).withHeader().withColumnReordering(true);
ObjectReader reader = mapper.readerFor(clazz).with(schema);
return reader.<T>readValues(stream).readAll();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们创建一个简单的Rest Controller来处理上传:
@RestController
public class UserController {
private final UserRepository repository;
public UserController(UserRepository repository) {
this.repository = repository;
}
@PostMapping(value = "/upload", consumes = "text/csv")
public void uploadSimple(@RequestBody InputStream body) {
repository.saveAll(CsvUtils.read(User.class, body);
}
@PostMapping(value = "/upload", consumes = "multipart/form-data")
public void uploadMultipart(@RequestParam("file") MultipartFile file) {
repository.saveAll(CsvUtils.read(User.class, file.getInputStream());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还需要一些HTML来进行上传,以下代码段是一个最小的工作示例:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14883 次 |
| 最近记录: |