使用 Spring 处理 RequestBody 上的 CSV

kio*_*sia 5 java csv spring spring-boot spring-web

我需要根据请求接收 csv 文件并对其进行处理。

@PostMapping(value = "/csv", consumes = "text/csv")
  public ViewObject postCsv(@RequestBody InputStream request){
// do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是当我执行时:

curl -X POST -H 'Content-Type: text/csv' -d @input.csv http://localhost:8080/csv
Run Code Online (Sandbox Code Playgroud)

这是我的控制台上显示的内容:

Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/csv;charset=UTF-8' not supported]
Run Code Online (Sandbox Code Playgroud)

Spring首先说我的请求无效。

那么,问题是:如何正确接收这个csv?

Dav*_*ave 1

正如有人在评论中提到的,一种方法是实现您自己的 HttpMessageConverter - 网络上有不同质量的示例。

如果您已经有一些使用 Springorg.springframework.core.io.Resource类解析 CSV 的代码,另一种选择是更改方法签名,如下所示以使用 Spring 的内置方法ResourceHttpMessageConverter

@PostMapping(path = "/csv", consumes = "application/octet-stream")
    public ViewObject postCsv(@RequestBody Resource resource){
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)