【发布时间】:2015-10-02 00:17:55
【问题描述】:
我正在使用 Spring 开发一个 REST API,并且想要一个 API 来处理具有不同媒体类型的 POST 请求,即请求正文中的 JSON 表单数据,或通过请求发送的 JSON 文件。
因此,当我有两个带有此类签名的单独方法都可以正常工作时,
@RequestMapping(value = "/configuration" , method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public String setConfiguration(@RequestPart MultipartFile file)
@RequestMapping(value = "/configuration" , method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}
public String setConfiguration(@RequestBody Configuration configuration)
这两种方法的处理逻辑几乎相同,所以我尝试用一种方法来吸收这两种数据格式,这段代码:
@RequestMapping(value = "/configuration" , method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
public String setConfiguration(@RequestPart MultipartFile file, @RequestBody Configuration configuration)
但是错误响应将返回为,
{"timestamp": 1443744180124,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.web.multipart.MultipartException",
"message": "The current request is not a multipart request",
"path": "/v1/testconfiguration"
}
想知道我是否对 REST 的媒体类型有一些基本的误解,如果这是可行的,我如何使用 Spring 来实现它?
【问题讨论】:
-
如果你想重用逻辑,你可以让第一个方法将 MultipartFile 转换为 Configuration,然后以它作为参数调用第二个方法。所以你仍然有 2 个 POST 处理程序,但你不要重复自己。
-
@approxiblue,谢谢,看来这就是我应该做的
标签: spring rest spring-mvc media-type