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

标签 java rest mobile http-headers jax-rs

我有一个静态 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/

相关文章:

android - 为什么移动浏览器加载我的页面时会完全放大?

java - apache HttpClient 的 Protocol.registerProtocol 是否会导致全局静态更改?

javascript - 对于 REST 服务,api.domain.com 是否比 domain.com/api 更安全?

java - "java.lang.AbstractMethodError: org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager" hibernate

java - heroku 上的 RESTful java web 服务?

css - 为移动设备调整图像大小 - 一切正常,但图像不会居中

javascript - HTML 5 在点击移动设备上播放音频文件

java - 如何更改 JTable 中单元格的背景和格式

java - 无法解析 : com. github 受影响的模块

java - Java中用于填充表格的for循环