2014-09-20 36 views
0

我有一个带有需要作为内容类型application/zip返回的自定义扩展的zip文件,但由于某种原因,无论我做什么,它总是以text/html形式返回。在Spring MVC中更改返回的内容类型

似乎配置一个内容协商管理器,如在这篇文章https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc会做的伎俩,但它似乎并没有为我工作。如果我通过相同的控制器/方法请求一个.zip文件,它可以很好地工作。

我试图配置几个不同的属性,试图完成我的目标,但这里是我的最新从我的application-context.xml。

<bean id="contentNegotiationManager" 
    class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="favorPathExtension" value="true" /> 
    <property name="ignoreAcceptHeader" value="true" /> 
    <property name="defaultContentType" value="application/zip" /> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="xyz" value="application/zip" /> 
     </map> 
    </property> 
</bean> 

这里是我的头从我的浏览器:

Remote Address:::1:8080 
Request URL:http://localhost:8080/app/faces/download/148943e4ead.xyz 
Request Method:GET 
Status Code:200 OK 

Request Headers 

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:JSESSIONID=gcvvicbqtlyyrbgnth3qurfy; jwplayer.volume=100; SESSION-GUID=f8vdloov22qbmx6r; plushContainerWidth=100%25; plushMultiOps=1; plushNoTopMenu=0; SQLiteManager_currentLangue=2; _ga=GA1.1.1642769916.1411099193 
DNT:1 
Host:localhost:8080 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 

Response Headers 

Content-Length:2585515 
Content-Type:text/html 
Server:Jetty(6.1.26) 

回答

0

看起来像我的过于复杂的问题。我只需要一种控制器方法的这种功能,所以只需将produces = "application/zip"添加到我的RequestMapping中即可。

@RequestMapping(
     value = "/download/{fileName:.+}", 
     method = RequestMethod.GET, 
     produces = "application/zip") 
@ResponseBody 
public FileSystemResource download(@PathVariable("fileName") String fileName) { 
... 
}