带有@RequestPart参数的表单对象结果为404

时间:2017-03-17 14:16:20

标签: spring spring-mvc curl spring-boot multipartform-data

我正在尝试创建一个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认为请求没有映射到这个方法的东西,但到目前为止我无法得到什么。

1 个答案:

答案 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"