java - 尝试使用 MockMvc 进行测试而不上传任何文件时出现 "The current request is not a multipart request"

标签 java spring http junit mockmvc

我想测试一个RequestMapping,它获取有关项目的一些信息,然后保留它,它还允许上传图像。但是,图像上传不是强制性的,我的 HTML 表单使用的是:enctype="multipart/form-data"。我正在尝试测试 Controller 而不实际上传任何文件, Controller 如下所示:

@RequestMapping(value="/admin/upload", method=RequestMethod.POST)
public ModelAndView addItem(
        @RequestParam(value="id", required=true) Integer id,
        @RequestParam(value="name", required=true) String name,
        @RequestParam(value="image", required=false) MultipartFile file,
        ) throws IOException {

    // some stuff here

    ModelAndView mov = new ModelAndView();
    return mov;

}

尽管我已将 required 标志设置为 false 我遇到了缺少参数的问题,但更重要的是,是否可以在模拟Mvc请求允许我测试这个映射而不需要上传任何图像?

    mockMvc.perform(post("https://localhost/store-admin/items/itemAddSubmit")
            .param("id", 1)
            .param("name", "testname").with(csrf()))
            .andDo(print());

最佳答案

对于多部分请求,您需要使用 fileUpload 方法而不是 getpost 或其他方法。

按如下方式更新您的代码 -

mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit")
            .param("id", 1)
            .param("name", "testname").with(csrf()))
            .andDo(print());

要实际发送文件,请使用 file 函数和 fileUpload ,如下所示 -

mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit")
            .file(myMockMultipartFile)
            .param("id", 1)
            .param("name", "testname").with(csrf()))
            .andDo(print());

其中 myMockMultipartFile 是一个 MockMultipartFile 对象。

关于java - 尝试使用 MockMvc 进行测试而不上传任何文件时出现 "The current request is not a multipart request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616437/

相关文章:

java - Java Spring Data 中的 MongoDB $graphlookup

angularjs - 应用实现 SSL : Mixed Content: This request has been blocked; the content must be served over HTTPS"后 GET 请求抛出错误

java - SSLEngine:在成功握手后展开时无效的 TLS 填充数据

java - 添加 X-Content-Type-Options Nosniff

java - 学习如何使用构建工具而不是 IDE。对调试如何适应感到困惑

java - 如何在 Spring 4 MVC 中使用 javax.validation 和 JSON 请求?

http - 为什么 Firefox 和 webkit 将 http :///example. org(带有三重斜杠)视为有效 URL?

java.security.NoSuchAlgorithmException : Algorithm PBKDF2WithHmacSHA1 not available

java - Spring MVC REST 不符合 JAX-RS。有关系吗?

spring boot上传文件只允许图片