【问题标题】:HTTP Status 406 – Not Acceptable in spring MVC Rest ServiceHTTP 状态 406 – Spring MVC Rest Service 中不可接受
【发布时间】:2018-07-22 07:01:00
【问题描述】:

这是我的代码:

@RequestMapping(value = "/report/download", method = RequestMethod.GET,produces="application/vnd.ms-excel")
    public Response getReportFile(@QueryParam("reportid") Long reportId)
    {
        System.out.println("Param"+reportId);
        Long n=(long) 10;
        String json=reportService.getReportFile(n);
        File file = new File("D:\\Agent Information.xls");  
        ResponseBuilder response = Response.ok((Object) file);  
        response.header("Content-Disposition","attachment; filename=Sample.xls");  
        return response.build();  
    }

我在 java 控制台中收到以下错误:处理程序执行导致异常:找不到可接受的表示

【问题讨论】:

  • 能否提供更多日志?理想情况下,调用端点后来自应用程序的堆栈跟踪
  • AbstractHandlerExceptionResolver.logException:186 -> 处理程序执行导致异常:找不到可接受的表示...并且在浏览器中点击时我得到“目标资源没有当前表示根据请求中收到的主动协商标头字段,用户代理可以接受,并且服务器不愿意提供默认表示。”
  • 请建议解决这个问题
  • 您的错误表明您的响应没有合适的转换器。您使用的“响应”类是什么,它是否完全是 spring MVC 的一部分,我怀疑它不是,尝试使用 ResponseEntity作为响应并将文件作为流发送。
  • 我使用了 Jaxrs 响应类,但我得到了这个响应。甚至尝试过简单的例子。

标签: java spring rest


【解决方案1】:

您的网络服务说它返回的响应类型未在您的客户端请求中的Accept HTTP header 中提供。

因此,在发出 HTTP 请求时,您必须添加 'Accept Headers' 。如果是JSON 请求,那么您将添加'Accept : application/json'。同样,对于您当前的示例,它将是

'Accept: text/plain'
'Accept-Charset: utf-8'

在这里找到所有accept headers。并按照此步骤解决

1) 找出网络服务返回的response (content type)

2) 在您的请求 Accept 标头中提供此(内容类型)。

【讨论】:

  • 感谢您的回复...我已经发布了 Web 服务,并且正在本地进行测试...所以我已经准确地给出了所有标题但仍然面临同样的问题:( :(跨度>
  • 我猜你的产品在这里制造了一个问题。尝试将produces="application/vnd.ms-excel" 更改为produces="application/json" 或将其完全删除。您可以添加 response.setContentType("application/vnd.ms-excel");而不是在您的声明之前 - response.header("Content-Disposition","attachment; filename=Sample.xls");
猜你喜欢
  • 2019-04-30
  • 2019-05-05
  • 2019-12-15
  • 2013-04-26
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2014-02-09
相关资源
最近更新 更多