【发布时间】:2015-08-06 05:18:03
【问题描述】:
API 支持各种形式的内容协商是很常见的:请求上的Accept HTTP 标头,请求上的Content-Type HTTP 标头(尽管我认为不符合标准),并从文件扩展名。我希望我的 Restlet REST API 支持所有这些,我正在寻求帮助来弄清楚如何做到这一点。
我的第一个尝试是查看 Restlet 是否支持开箱即用。我正在使用 Jackson 扩展,所以我创建了一个简单的应用程序,将 /foo 路由到 ServerResource,返回 Map<String,Boolean>。
当我简单地与/foo 建立一个 GET HTTP URL 连接(例如https://stackoverflow.com/a/953697/27561)时,我得到了 XML。我希望这个默认为 JSON。这就是问题#1。 如何使默认类型为 JSON?
当我对/foo.xml 或/foo.json 进行相同的HTTP URL 连接调用时,我得到一个404。这是问题2。 如何使用文件扩展名来表示预期的媒体类型?
由于我在 Servlet 容器中运行,我目前的方法是包装 HttpServletRequest,如果没有文件扩展名,则将 Accept HTTP 标头设置为 application/json。这是目前正在解决问题 #1 的 hack。但是,我无法以摆脱问题 #2 中的 404 的方式扩展此方法。
Restlet 使许多其他事情变得简单,以至于我假设我遗漏了一些东西——有些配置存在问题,我可以在某处进行调整以使其做正确的事。我在 API 文档中看到了有关这方面的提示,但没有什么明显的。那是什么配置呢?
【问题讨论】:
-
如果您想查看我正在使用的代码库,请访问:github.com/RobertFischer/Restling/tree/master/test/wars/…
标签: java mime-types content-type restlet media-type