春季5-读取JSON或MultipartFile

时间:2018-12-05 15:23:33

标签: spring-mvc spring-boot spring-rest

我遇到了一个看起来很简单的问题。我有一个HTTP端点,该端点应接受JSON正文或上传的文件。

这是控制器方法的定义:

@PostMapping(value = "/api/endpoint")
public CompletableFuture<ResponseEntity<Void>> createResource(
       @RequestParam(name = "file", required = false) MultipartFile file,
       @RequestBody(required = false) Command command){
}

Command是一个POJO类,带有用于反序列化的Jackson注释。 当我通过 Content-Type: application/json 传递JSON正文时,它可以正常工作。但是,当我使用 Content-Type: multipart/form-data 传递文件时,我得到415不支持的媒体类型。

仅传递JSON正文时,这是原始的http请求。

POST /api/devices?= HTTP/1.1
Host: localhost:8080
Content-Type: application/json
cache-control: no-cache
{"foo": "bar"}------WebKitFormBoundary7MA4YWxkTrZu0gW--

任何想法都是由什么引起的,谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下代码。

@PostMapping(value = "/api/endpoint",consumes = {"multipart/form-data"})
public CompletableFuture<ResponseEntity<Void>> createResource(
       @RequestPart("file") MultipartFile file,
       @RequestPart Command command){
}

答案 1 :(得分:0)

您可能需要两种具有不同参数和注释的单独方法。当然,每个人都可以为它们的共同行为调用一个共享的内部方法。