gpt4 book ai didi

spring-mvc - Spring MVC 为 application/octet-stream 提供 HTTP 406

转载 作者:行者123 更新时间:2023-12-02 05:01:17 26 4
gpt4 key购买 nike

我正在使用 Spring Web MVC 并编写了一个 Controller ,该 Controller 应将二进制数据返回到显示 3D 内容的网页中的插件。这个插件使用 STK 文件作为它的模型,所以我已经设置了我的 webapp 来为 *.stk URLs 生成这种内容

springDispatcherServlet 设置为处理我的 web.xml 中的 *.stk 请求

<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>*.stk</url-pattern>
</servlet-mapping>

我的 Controller 看起来像这样:

@Controller
@RequestMapping(value="/3dobject", produces="application/octet-stream")
public class Object3DController {

@Autowired
private DesignerService designerService;

@RequestMapping(value="/{article}.stk", method=RequestMethod.GET, headers="Accept: application/octet-stream")
public void getObject3DForArticle(HttpServletResponse response, @PathVariable String article) throws IOException {
response.setContentType("application/octet-stream");
Object3D object = designerService.get3DModelForArticleNumber(article, LanguageCode.NORWEGIAN);
byte[] content = object.getContent();
response.setContentLength(content.length);
IOUtils.write(content, response.getOutputStream());
}
}

当我尝试通过浏览器访问数据时,出现以下错误:

HTTP 状态 406 - 此请求标识的资源只能生成具有根据请求“接受” header Not Acceptable 特征的响应。

我已将我的应用程序部署到本地主机上的 tomcat 服务器。

对于让浏览器下载二进制数据我必须做什么有什么想法吗?

附言!我从 *.3do(3d 对象)更改为 *.stk。使用 3do 它按预期工作,但插件失败并出现错误(很难解释),所以我必须进行实验以验证 URL 扩展名是否重要...

最佳答案

RequestMapping.produces()缩小请求范围,因此是

only mapped if the Accept matches one of these media types

因此您需要在插件的请求中设置相应的Accept header。这不能通过简单地通过在浏览器中键入 URL 来发出 HTTP GET 请求来完成。我发现对 Chrome 有用的一个插件是 Advanced REST Client .还有很多其他提供类似功能的。或者尝试使用 cURL使用正确的 header 发出请求。

关于spring-mvc - Spring MVC 为 application/octet-stream 提供 HTTP 406,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com