测试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
相关产品推荐
相关产品推荐

