我有一个restful web服务资源,我为它定义了XML和HTML方法。对于桌面浏览器,该服务准确地生成HTML,而对于我编写的Android客户端,它准确地生成XML。
然而,当涉及到移动浏览器时,该服务会生成XML,而它应该在XML中生成HTML。
一种方法用进行注释
@Produces({MediaType.TEXT_HTML})
另一个是
@Produces({MediaType.APPLICATION_XML})
我是否需要查看Accept标头以外的内容才能获得所需的结果?
更新:从移动浏览器请求中截获的可接受媒体类型为:
信息:application/xml
信息:application/xhtml+xml
信息:图像/png
信息:text/html;q=0.9
信息:text/plain;q=0.8
信息:/;q=0.5
这篇文章解释了基于webkit的浏览器(大多数移动浏览器),以及IE是如何使用accept头来优先考虑XML而不是HTML的。基于这一点和这个SO问题,最好不要仅仅依赖于请求的accept标头,而是将其与URL指定的表示形式相结合。
另一种解决方案是通过在@Produces声明中附加一个质量属性来覆盖客户端的Accept首选项。如果你使qs大于1:
@Produces({MediaType.TEXT_HTML+";qs=1.1"})
浏览器客户端的首选项将被覆盖。然后,对于需要qs值的客户端,您必须使客户端上其他内容类型的qs值更大。我不知道这种方法是否是一种好的做法,但我就是这么做的。