代码之家  ›  专栏  ›  技术社区  ›  riorio

Mockmvc,用于接受多部分文件的DELETE方法

  •  2
  • riorio  · 技术社区  · 6 年前

    我正在尝试为一个具有 删除

    我知道我可以像这样做一个简单的删除:

        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协议是否可能不支持使用多部分文件进行删除?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Karol Dowbecki    6 年前

    看来 MockMultipartHttpServletRequestBuilder 仅支持 POST 请求,表示HTTP方法的常量 is hard-coded in the constructors . 这很奇怪,因为至少 岗位 PUT

        2
  •  0
  •   Ulrich Kowohl    6 年前

    我个人认为,从API设计的角度来看,这是错误的。

    REST大量使用资源,因此使用它们的专用标识符。

    get/entities用于获取实体列表 get/entities/{entity id}用于获取单个实体

    我将应用于delete的相同模式:通过标识符寻址资源。

    推荐文章