Man*_*tha 6 spring-mvc wiremock
我是新来的WireMock
. 我将WireMock
服务器作为独立进程运行。我可以通过配置/mappings
文件夹下的 json 文件来模拟简单的 REST API。现在,我想模拟一个文件下载端点。我怎样才能做到这一点?
我不知道它是否有帮助,终点是在 Java/Spring 中,如下所示:
@RequestMapping(value = "xxx/get", method = {RequestMethod.GET})
public ResponseEntity<Object> getFile(HttpServletResponse response) throws Exception {
final Resource fileResource = fileResourceFactoryBean.getObject();
if (fileResource.exists()) {
try (InputStream inputStream = fileResource.getInputStream()) {
IOUtils.copy(inputStream, response.getOutputStream());
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + fileResource.getFilename());
response.flushBuffer();
inputStream.close();
return new ResponseEntity<>(HttpStatus.OK);
} catch (Exception e) {
LOGGER.error("Error reading file: ", e);
return new ResponseEntity<Object>("Error reading file.", HttpStatus.BAD_REQUEST);
}
}
return new ResponseEntity<Object>(fileResource.getFilename() + " not found.", HttpStatus.BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)
我的映射 json 文件中的响应部分如下所示:
"response": {
"status": 200,
"bodyFileName": "fileName", // file under __files directory
"headers": {
"Content-Type": "application/octet-stream"
}
}
Run Code Online (Sandbox Code Playgroud)
一个很晚的答案,但我发现的唯一可行的解决方案是:
"response": {
"status": 200,
"headers": {
"Content-Type": "image/jpeg"
},
"base64Body": "2wBDAAQDAwQDAwQE...=="
}
Run Code Online (Sandbox Code Playgroud)
我将以 Base64 编码的图像内容直接放入映射文件中。
对于小文件来说或多或少都可以。
在java中,它似乎更方便一些:
.willReturn( aResponse()
.withBody( myImage.getBytes() )
Run Code Online (Sandbox Code Playgroud)
使用 json DSL,您只需:
bodyFileName
(注意:文档说:“正文文件应采用 UTF-8 格式”)base64Body
base64BodyFileName
是不可能的:-(文件下载实际上与发送标记或 JSON 没有什么不同。如果 Web 浏览器无法将 MIME 类型识别为可以呈现的类型,则 Web 浏览器会将文件视为下载。
要使用 WireMock 实现这一点,请尝试:
归档时间: |
|
查看次数: |
15620 次 |
最近记录: |