我正在尝试创建一个URI,其中MultipartFile
和表单对象(bean)都是必需的。
该方法使用以下代码:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void create(@RequestPart MultipartFile file,
@RequestPart String form) {
// ...
}
以下 curl 命令:
curl -X POST http://localhost/files \
-F file=@E:\path\to\file \
-F form={"x":0,"y":0,"width":512,"height":512}
但是当我尝试用bean替换字符串时,我得到了404响应。
使用bean修改代码,而不是工作:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void create(@RequestPart MultipartFile file,
@RequestPart ClipForm form) {
// ...
}
为 curl 中的每个部分添加Content-Type标头似乎没有帮助:
curl -X POST http://localhost/files \
-F file=@E:\path\to\file;type=multipart/form-data \
-F form={"x":0,"y":0,"width":512,"height":512};type=application/json
我可能遗漏了一些让Spring认为请求没有映射到这个方法的东西,但到目前为止我无法得到什么。
答案 0 :(得分:0)
无论出于何种原因,引用 curl 命令中的所有内容并使用 bash 使其正常运行。
curl -X 'POST' \
-F 'file=@E:\path\to\file;type=multipart/form-data' \
-F 'form={"x":0,"y":0,"width":512,"height":512};type=application/json' \
'http://localhost/files'
我认为某个角色被Windows cmd 错误解释。
修改强>
如果您希望它在Windows cmd 中运行,则需要使用double quotes and escaped double quotes。它不会像 bash 那样使用单引号。
curl -X "POST" ^
-F "file=@E:\path\to\file;type=multipart/form-data" ^
-F "form={\"x\":0,\"y\":0,\"width\":512,\"height\":512};type=application/json" ^
"http://localhost/files"