[英]Mockmvc for a DELETE method that accepts a Multipart file
我正在嘗試為具有DELETE方法的控制器編寫單元測試,該方法應該接受File和text param。
我知道我可以像這樣做一個簡單的刪除:
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.delete(
"/deletecat/catname/Oscar"))
.andExpect(status().isOK)
.andReturn();
我可以像這樣對多部分文件進行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?
看來MockMultipartHttpServletRequestBuilder
僅支持POST
請求,表示HTTP方法的常量在構造函數中進行了硬編碼 。 這很奇怪,因為至少POST
和PUT
通常與multipart一起使用。
恐怕在當前版本中,您將不得不派生該類並自行更改HTTP方法。
我個人會說從API設計角度來看這是錯誤的。
REST大量使用資源,因此使用它們的專用標識符,例如
get / entities獲取實體列表get / entities / {entity-id}獲取單個實體
我將申請刪除的相同模式:按標識符處理資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.