我有一个静态 Web 服务资源,我已为其定义了 XML 和 HTML 方法。对于桌面浏览器,该服务可以准确地生成 HTML,而对于我编写的 Android 客户端,该服务可以准确地生成 XML。
但是,当涉及到移动浏览器时,该服务会生成 XML,而它应该生成 HTML。
一个方法用注释
@Produces({MediaType.TEXT_HTML})
另一个是
@Produces({MediaType.APPLICATION_XML})
我是否需要查看 Accept header 以外的内容才能获得所需的结果?
更新:从移动浏览器请求中拦截的可接受的媒体类型是:
信息:应用程序/xml
信息:application/xhtml+xml
信息:图像/png
信息:文本/html; q=0.9
信息:文本/纯文本; q=0.8
信息:/; q=0.5
最佳答案
This这篇文章解释了基于 webkit 的浏览器(大多数移动浏览器)如何使用接受 XML 优先于 HTML 的 header 。基于此和this所以问题,最好不要仅仅依赖请求的接受 header ,而是将其与 URL 指定的表示结合起来。
另一个解决方案是通过将质量属性附加到 @Produces 声明来覆盖客户端的 Accept 首选项。如果您使 qs 大于 1:
@Produces({MediaType.TEXT_HTML+";qs=1.1"})
浏览器客户端的首选项将被覆盖。然后,对于有需要的客户端,您必须为客户端上的其他内容类型设置更大的 qs 值。我不知道这种方法是否是好的做法,但这就是我所采用的。
关于java - 为什么我的 Web 服务为大多数移动浏览器生成 XML 结果而不是 HTML 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878291/