You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试Rest Controller POST上传接口报Not enough variable values错误如何解决

错误根因

  • 路径占位符未传值:你构造请求的路径/{userProfileId}/image/upload里声明了路径变量userProfileId,但没有为这个占位符传入对应值,Spring无法完成路径解析,直接抛出参数不足的异常。MockMvc的请求构造方法中,路径字符串之后的可变参数就是用来填充路径占位符的,有多少个占位符就要传多少个对应值,顺序和占位符出现的顺序一致。
  • 隐藏问题:ImageIO.write(img, "file", byteArrayOutputStream)的第二个参数需要指定图片格式,你误写为file,会导致生成的字节流不符合PNG格式规范,即使路径问题解决后接口也会返回异常。

修复后的测试代码

只需要修改两处:一是给multipart方法追加路径变量参数,二是修正ImageIO的格式参数:

@Test
void uploadUserProfileImage() throws Exception {
    BufferedImage img;
    img = ImageIO.read(new File("src/main/java/images/bane.png"));
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    // 修复图片格式参数错误
    ImageIO.write(img, "png", byteArrayOutputStream);
    byte[] byteArryaImg = byteArrayOutputStream.toByteArray();
    //given
    MockMultipartFile file = new MockMultipartFile("file",
            "file",
            MediaType.IMAGE_PNG_VALUE,
            byteArryaImg);

    UserProfileModel user = new UserProfileModel(UUID.randomUUID(), "luad", "ada");
    String userProfileId = user.getUserProfileId().toString();

    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    mockMvc.perform(multipart("/{userProfileId}/image/upload", userProfileId) // 追加路径变量值填充占位符
                    .file(file)
                    .accept(MediaType.IMAGE_PNG))
            .andExpect(status()
                    .isOk());
}

内容的提问来源于stack exchange,提问作者Marquez Ludin Albarado Jaimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:30:03