我有以下请求处理程序来保存汽车.我已经证实,当我使用例如cURL时,这是有效的.现在我想用Spring MVC Test对方法进行单元测试.我曾尝试使用fileUploader,但我无法让它运行起来.我也没有设法添加JSON部分.
我如何使用Spring MVC Test对此方法进行单元测试?我无法找到任何这方面的例子.
@RequestMapping(value = "autos", method = RequestMethod.POST)
public ResponseEntity saveAuto(
@RequestPart(value = "data") autoResource,
@RequestParam(value = "files[]", required = false) List<MultipartFile> files) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想为我的自动+一个或多个文件上传一个JSON表示.
我会在正确的答案中加上100分!
我试图向我的控制器发送POST请求但不能传递任何类型的任何参数,除非我决定使用JSON.我的目标是将一个字符串和一个文件传递给我的控制器,但我一直收到Required request part 'xxx' is not present错误.
@RestController
public class ConfigurationController {
@PostMapping(value = "/config")
public ResponseEntity<?> saveEnvironmentConfig(@RequestParam("file") MultipartFile uploadfile){
return ResponseEntity.ok().body(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我不能在这里提交文件.同样,如果我尝试:
@RestController
public class ConfigurationController {
@PostMapping(value = "/config")
public ResponseEntity<?> saveEnvironmentConfig(@RequestParam("name") String name){
return ResponseEntity.ok().body(null);
}
}
Run Code Online (Sandbox Code Playgroud)
同样的事我不能在这里得到名字.
我通过Postman发送请求,如以下屏幕截图所示:
唯一的标头标签用于授权.我没有任何Content-Type标头,我试图添加multipart/form-data但没有帮助.
只有我可以传递String参数的方法是添加到URL.所以下面的http://localhost:8080/SearchBox/admin/config?name=test工作,但这不是我想要的.我想在Body部分中使用String和File参数.
我还通过CURL进行了测试:
curl -X POST -H "Authorization:Bearer myToken" -H "Content-Type:Multipart/form-data" http://localhost:8080/SearchBox/admin/config --data 'pwd=pwd'
curl -X POST -H "Authorization:Bearer myToken"http://localhost:8080/SearchBox/admin/config --data 'pwd=pwd'
curl -H "Authorization:Bearer myToken" -F file=@"/g123.conf" http://localhost:8080/SearchBox/admin/config
Run Code Online (Sandbox Code Playgroud)
注意: …
我写了一些与使用spring上传文件相关的代码,它运行正常,现在我正在为此编写集成测试用例但我面临一些问题我的控制器方法,
@RequestMapping(value = "/{attributeName}/upload", method = RequestMethod.POST)
@ResponseBody
public Result uploadCompany(HttpServletRequest request,
@RequestParam MultipartFile file, @PathVariable String attributeName,
@RequestParam long dateKey)
throws IOException, PromotionException {
some code
}
Run Code Online (Sandbox Code Playgroud)
测试用例
@Test
public void shouldReturnTrueStatusWhenUploadCompany() throws Exception {
MockMultipartFile file = new MockMultipartFile("company_upload", "company_upload.csv",
MediaType.MULTIPART_FORM_DATA_VALUE, EMPLOYEE_NUMBER_FILE_CONTENT.getBytes(UTF_8));
mockMvc.perform(
MockMvcRequestBuilders.fileUpload(
PROMOTION + StringUtils.replace(ATTRIBUTE_NAME, "{attributeName}", "COMPANY") + "/upload")
.file(file).param("dateKey", "852017") .contentType(MediaType.MULTIPART_FORM_DATA)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
Run Code Online (Sandbox Code Playgroud)
但我得到了
2017-05-09 13:42:42,506 ERROR [Test worker] INTERNAL_SERVER_ERROR:
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file' is not present
Run Code Online (Sandbox Code Playgroud)
我哪里错了?