gpt4 book ai didi

spring-mvc - curl / Spring MVC : POST gives MissingServletRequestParameterException

转载 作者:行者123 更新时间:2023-12-01 12:41:27 24 4
gpt4 key购买 nike

我正在使用 Spring MVC 4 和 @RestController 来接收表单发布。我按照给出的提示做了它 here并且它与 Spring Test MockMvc 配合良好。

但是,我现在想使用 curl 将内容发布到我的服务器,但我找不到被接受的方法。我总是得到以下异常:org.springframework.web.bind.MissingServletRequestParameterException:必需的字符串参数"file"不存在

我尝试混合使用 Spring@Consumescurl-H 选项, 但它似乎并不相关。

那么,给定以下 @RestController,应该执行什么 curl 命令来发布内容?

@RestController
@RequestMapping(value = ONE_COLLECTION)
public class OneCollectionController {

@RequestMapping(method = RequestMethod.POST )
public RESTDocumentListElement uploadDocument( @RequestParam("file") MultipartFile file, @RequestPart("data") NewDocumentData documentData ) throws IOException {
// -- code here --
}
}

我试过的最后一条命令(出现异常):

curl http://host/oneCollection -X POST -F "file=@./myFile.txt" -H "Content-Type: multipart/form-data" -F 'data={"name"="myName"}'

工作 Spring 测试 MockMvc 代码:

// ...

MockMultipartFile firstFile = new MockMultipartFile("file", "dummyFile.txt", "text/plain", "blahblah".getBytes());
MockMultipartFile jsonFile = new MockMultipartFile("data", "", "application/json", TestUtil.convertObjectToJsonString(documentData).getBytes() );

ResultActions result = mockMvc.perform(fileUpload(ONE_COLLECTION)
.file(firstFile)
.file(jsonFile)
);

// ...

最佳答案

想通了!

我已经更改了 Controller 方法映射:

 @RequestMapping(method = RequestMethod.POST, consumes = {"multipart/*"})
public RESTDocumentListElement uploadDocument( @RequestPart("file") MultipartFile file, @RequestPart("data") NewDocumentData documentData ) throws IOException {

但棘手的部分是我的 JavaConfig 中的 MultipartResolver,我使用的是 Servlet 3 提供的标准 StandardServletMultipartResolver,并且不得不切换到 Apache Commons 之一:

@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}

所以我也需要对 maven 有一些依赖

<!-- Apache Commons -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>

最后,curl 命令是:

curl http://host/oneCollection -X POST -F 'file=@./firstFile.txt;type=text/plain' -F 'data={"collection":"toto"};type=application/json' -H "Content-Type: multipart/form-data" 

关于spring-mvc - curl / Spring MVC : POST gives MissingServletRequestParameterException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24162882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com