【发布时间】:2015-01-28 13:54:17
【问题描述】:
我有以下返回文件的spring mvc方法:
@RequestMapping(value = "/files/{fileName}", method = RequestMethod.GET)
public FileSystemResource getFiles(@PathVariable String fileName){
String path="/home/marios/Desktop/";
return new FileSystemResource(path+fileName);
}
我希望 ResourceHttpMessageConverter 根据其文档创建具有八位字节流类型的适当响应:
如果 JAF 不可用,则使用 application/octet-stream。
但是,尽管我正确获取文件没有问题,但结果是 Content-Type: application/json;charset=UTF-8
你能告诉我为什么会这样吗?
(我使用弹簧版本 4.1.4。我没有明确设置任何消息转换器,我知道弹簧默认加载 ResourceHttpMessageConverter 和 MappingJackson2HttpMessageConverter,因为我的类路径中有 jackson 2,因为我有其他返回 json 的 mvc 方法。
另外,如果我使用HttpEntity<FileSystemResource> 并手动设置内容类型,或者使用produces = MediaType.APPLICATION_OCTET_STREAM 指定它,它工作正常。
另请注意,在我的请求中,我没有指定任何接受的内容类型,并且不希望依赖我的客户来执行此操作)
【问题讨论】:
-
我想你已经回答了你自己的问题,听起来杰克逊转换器优先于资源转换器。
-
JAF 始终可用,除非您使用的是非常旧的 Java 版本;)
-
但是结果被ResourceHttpMessageConverter写入成功,因为是文件,为什么内容类型取自MappingJackson2HttpMessageConverter?
标签: spring spring-mvc