如何在 Spring Rest 中接受和解析带有 Jackson 的 csv

How to accept and parse a csv w/ Jackson in Spring Rest

我需要做什么才能上传 csv 文件并使用 Jackson 自动解析它?只需使用下面的内容,我就会得到“不支持的媒体类型”,这让我觉得我缺少配置。

@RestController
@RequestMapping("/upload")
public class Uploader {
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public String create(@RequestBody List<MyDataType> myFile) {
        return myFile.toString();
    }
}

@Data
@JsonPropertyOrder({ "item1", "item2" })
public class MyDataType {
    public String item1;
    public String item2;
}

这是您需要的:- 依赖性:-

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.8</version>
</dependency>       

<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.5</version>
</dependency>

然后在控制器

@PostMapping("/uploadCSVFile")
public Response uploadSingleCSVFile(@RequestParam("csvfile") MultipartFile csvfile) {

    Response response = new Response();

InputStream file = csvfile.getInputStream();
List<Object> lstCustomers = ApacheCommonsCsvUtil.parseCsvFile(file);

    }

代码仅供参考,请格式化测试。

在 REST-API 中,文件上传通常作为多部分表单数据请求完成,以确保您还可以传递即 JSON 数据以及您的文件。因此,您可能需要将媒体类型添加到 @PostMapping 注释中,例如 @PostMapping(consumes = {"multipart/form-data"}).

然后您可以将文件注入您的控制器方法并在那里解析 CSV。

@PostMapping(consumes = {"multipart/form-data"})
@ResponseStatus(HttpStatus.CREATED)
public List<MyDataType> create(@RequestPart("file") MultipartFile file) throws IOException {
    CsvMapper csvMapper = new CsvMapper();
    CsvSchema schema = csvMapper.schemaFor(MyDataType.class).withHeader().withColumnSeparator(';');
    MappingIterator<MyDataType> parsedData = csvMapper.readerWithSchemaFor(MyDataType.class)
            .with(schema)
            .readValues(new String(file.getBytes(), StandardCharsets.UTF_8));

    return parsedData.readAll();
}

您可能还需要添加以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
</dependency>