Spring为同一端点引导多个请求类型

时间:2016-07-19 20:43:25

标签: java spring spring-mvc

我目前正在将旧API移植到Spring Boot并遇到问题。在旧API中,可以对同一端点发出两种类型的cURL请求:一种用于发布JSON数据,另一种用于使用文件发布JSON数据。这两个请求看起来像这样:

仅限JSON:

curl -i -X POST 'http://localhost:8080/myEndpoint' \
-H 'Accept:application/json' \
-H 'someheader:value' \
-H 'Content-Type:application/json' \
-d '{ "jsondata":"goesHere" }'

JSON with image:

curl -i -X POST 'http://localhost:8080/myEndpoint' \
-H 'Accept: application/json' \
-H 'Content-Type: multipart/mixed' \
-H 'someheader:value' \ 
-F '{ "jsondata":"goesHere" }' \
-F "file=@filewanted.file" 

可以看出,我可以向同一个端点发送请求主体或多部分/混合请求,并且根据收到的内容,服务器将执行一些业务逻辑。

我试图复制这种行为是春天无济于事。我能够轻松地复制仅JSON请求:

@RequestMapping(value = "/myEndpoint", method = RequestMethod.POST)
public ResponseEntity createActivityFile(@RequestHeader(value = "someheader") String someheader,
                                         @RequestBody() String body,) {
    // do something...
    return new ResponseEntity(HttpStatus.OK);
}

当我将多部分文件添加到混合中时会出现问题。我试过了:

@RequestMapping(value = "/myEndpoint", method = RequestMethod.POST)
public ResponseEntity createActivityFile(@RequestHeader(value = "someheader") String someheader,
                                         @RequestBody() String body,
                                         @RequestPart(value = "file", required = false) MultipartFile file) {
    // do something...
    return new ResponseEntity(HttpStatus.OK);
}

但是有了这个,我总是遇到The request was rejected because no multipart boundary was found错误。

这让我想问,我正试图用Spring Boot做些什么?如果是这样,我的RequestMapping会是什么样的?

1 个答案:

答案 0 :(得分:1)

您可以使用@Consumes注释

来完成此操作

consumes = MediaType.APPLICATION_JSON

其他端点具有不同的MediaType