【发布时间】:2015-10-20 18:22:49
【问题描述】:
我正在尝试使用 RESTful 调用下载 Excel 文件。我认为这应该很简单,但我不断收到 HTTP 406 Not Applicable Eror。这是我的控制器方法的样子:
@RequestMapping(value = "/gettemplate", method = RequestMethod.GET, produces = "application/vnd.ms-excel")
@ResponseBody
public Response getExcelTemplate() throws Exception {
File templateFile = new File("TestFile.xlsx");
ResponseBuilder builder = Response.ok(templateFile,"application/vnd.ms-excel");
builder.header("Content-Disposition", "attachment; filename=\"" + templateFile.getName() + "\"" );
return builder.build();
}
我尝试将请求标头设置为接受application/vnd.ms-excel,我也尝试使用application/octet-stream 而不是vnd.ms-excel。无论哪种情况,我都会收到带有 406 错误消息的 HTML 响应。这是我的 Ajax 测试调用的样子:
Ext.Ajax.request({
url: 'myservice/gettemplate',
//dataType: 'application/vnd.ms-excel',
headers: {
'Accept': 'application/vnd.ms-excel, text/plain, */*'
//'Content-Type': 'application/vnd.ms-excel'
},
success: function (response, options) {
alert(1);
},
failure: function (response, options) {
alert(2);
}
});
我已经注释掉了我尝试并删除的行,因为它没有帮助。这可能是一个非常简单的配置更改,但我似乎无法弄清楚。
【问题讨论】:
-
内容类型被声明了两次,一次在@RequestMapping 注释中的
produces值中,另一次在ResponseBuilder 中。尝试删除其中一个。 -
@ESala 删除一个没有帮助。尝试更改为
ResponseBuilder builder = Response.ok(templateFile);仍然得到相同的错误。
标签: java spring rest extjs download