如何使用Spring MockMvc输入多部分/表单数据?
我有一个带有PUT
方法的控制器方法,该方法接收multipart / form-data:
@RequestMapping(value = "/putIn", method = RequestMethod.PUT) public Foo updateFoo(HttpServletRequest request,
@RequestBody Foo foo,
@RequestParam("foo_icon") MultipartFile file) {
...
}
我想使用进行测试MockMvc
。不幸的是MockMvcRequestBuilders.fileUpload
创建了一个MockMultipartHttpServletRequestBuilder
具有POST
方法的实例:
super(HttpMethod.POST, urlTemplate, urlVariables)
当然,我 创建自己的实现MockHttpServletRequestBuilder
,例如
public MockPutMultipartHttpServletRequestBuilder(String urlTemplate, Object... urlVariables) { super(HttpMethod.PUT, urlTemplate, urlVariables);
super.contentType(MediaType.MULTIPART_FORM_DATA);
}
因为MockHttpServletRequestBuilder
具有包本地构造函数。
但是我想知道是否还有其他更方便的 方法?可以这样做吗,可能是我错过了一些现有的类或方法吗?
回答:
是的,有一种方法,而且也很简单!
我自己也遇到了同样的问题。尽管我不满意Sam Brannen的回答,但似乎Spring
MVC现在支持PUT文件上传,因为我可以简单地使用Postman发出这样的请求(我使用的是Spring Boot
1.4.2)。因此,我一直在挖掘,发现唯一的问题是事实所MockMultipartHttpServletRequestBuilder
返回MockMvcRequestBuilders.fileUpload()
的方法将方法硬编码为“
POST”。然后我发现了with()
方法…
这使我想出了这个巧妙的小窍门,以强制MockMultipartHttpServletRequestBuilder
无论如何都要使用“ PUT”方法:
MockMultipartFile file = new MockMultipartFile("data", "dummy.csv", "text/plain", "Some dataset...".getBytes());
MockMultipartHttpServletRequestBuilder builder =
MockMvcRequestBuilders.fileUpload("/test1/datasets/set1");
builder.with(new RequestPostProcessor() {
@Override
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
request.setMethod("PUT");
return request;
}
});
mvc.perform(builder
.file(file))
.andExpect(status().ok());
奇迹般有效!
以上是 如何使用Spring MockMvc输入多部分/表单数据? 的全部内容, 来源链接: utcz.com/qa/400496.html