我正在尝试为具有 DELETE 方法的控制器编写单元测试,该方法应该接受File和text param。
我知道我可以做一个简单的删除:
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.delete(
"/deletecat/catname/Oscar"))
.andExpect(status().isOK)
.andReturn();
我可以对这样的Multipart文件执行POST:
MockMultipartFile multipartFile = new MockMultipartFile("file", new FileInputStream(TEST_RESOURCES_FOLDER + "Cats.csv"));
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadcats")
.file(multipartFile)
.param("ownerName", "Austin Powers"))
.andExpect(status().isOk())
.andReturn();
但是当我试图将它们组合在一起并写成这样时:
MvcResult result = mockMvc.perform(
MockMvcRequestBuilders.delete(
"/deletecats",
multipartFile, "Austin Powers"))
.andExpect(status().isOk())
.andReturn();
我收到以下错误:“当前请求不是多部分请求” :
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request
HTTP协议是否可能不支持对Multipart文件执行DELETE?
答案 0 :(得分:0)
似乎MockMultipartHttpServletRequestBuilder
仅支持POST
请求,该常量表示HTTP方法is hard-coded in the constructors。这很奇怪,因为至少POST
和PUT
通常与多部分一起使用。
恐怕在当前版本中,您将不得不派生该类并自行更改HTTP方法。
答案 1 :(得分:0)
我个人会说从API设计角度来看这是错误的。
REST正在大量使用资源,因此正在使用它们的专用标识符,例如
获取/ entities以获取实体列表 获取/ entities / {entity-id}以获取单个实体
我将申请删除的相同模式:按标识符处理资源。