contentType“application / octet-stream”的mockmvc下载功能会引发FileNotFound错误

时间:2016-09-28 07:29:47

标签: java junit mockmvc

我是mockmvc api的新手。

我正在尝试为我的控制器编写单元,其中一个方法执行下载。请找到代码段:

控制器:

@RequestMapping(value = "/download-template", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    @ResponseBody
    public FileSystemResource downloadTemplate(HttpServletRequest request,
            HttpServletResponse response) {

        logger.info("User ID: " + request.getAttribute("userId")
                + " - POST: /upload/download-template");

        String rootDir = config.getBaseFolder();
        DownloadUploadTemplateResponse res = uploadService.downloadTemplate(
                rootDir, false);

        response.setHeader("Content-Disposition",
                "attachment; filename=" + res.getFileName());

        return new FileSystemResource(res.getTemplateFile());

    }

单元测试代码:

@Test
    public void testDownloadTemplate(){
        DownloadResponse res = new DownloadResponse();
        String templateFile = "upload-template.xlsx";
        String fileName = System.getProperty("java.io.tmpdir") + templateFile;
        res.setFileName(fileName);
        res.setTemplateFile(templateFile);
        when(config.getBaseFolder()).thenReturn(System.getProperty("java.io.tmpdir"));
        when(uploadService.downloadTemplate( System.getProperty("java.io.tmpdir"), false)).thenReturn(res);
        //File file = new File(fileName);
        FileSystemResource resource = new FileSystemResource(res.getTemplateFile());
        try{
            ResultActions action = mockMvc.perform(get("/upload/download-template").contentType(APP_OCTET_STREAM_VALUE_UTF8));
            action.andExpect(header().string("Content-Disposition",
                    "attachment; filename=" + res.getFileName()));
            action.andExpect(status().isOk());


        }catch(Exception e){
            e.printStackTrace();
            fail();
        }
    }

以下行抛出java.io.FileNotFoundException:upload-template.xlsx(系统找不到指定的文件): ResultActions action = mockMvc.perform(get(“/ upload / download-template”)。contentType(APP_OCTET_STREAM_VALUE_UTF8));

请指导我需要在httprequestbuilder中添加哪些内容来解决此问题。

1 个答案:

答案 0 :(得分:0)

我的不好......错误很明显,以解决问题。问题是文件没有实际存在:)。 因此,通过将文件放在临时文件夹中帮助我解决问题。感觉像是啊。