为什么我的web服务为大多数移动浏览器生成XML结果而不是HTML结果



我有一个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值更大。我不知道这种方法是否是一种好的做法,但我就是这么做的。

最新更新