2012-01-16 21 views
1

我有一個寧靜的Web服務資源,我爲其定義了XML和HTML方法。對於桌面瀏覽器,該服務可以準確地生成HTML,而對於我編寫的Android客戶端,它可以準確地生成XML。爲什麼我的Web服務爲大多數移動瀏覽器生成XML結果而不是HTML結果?

但是,當涉及到移動瀏覽器時,該服務會生成XML,它應該生成HTML。

一種方法是標註了

@Produces({MediaType.TEXT_HTML}) 

和其他與

@Produces({MediaType.APPLICATION_XML}) 

我需要看超過了接受頭,以獲得期望的結果?

更新:可接受的媒體類型,從所述移動瀏覽器請求攔截,有:

INFO:應用/ XML

INFO:應用/ XHTML + xml的

INFO:圖像/ png

INFO:text/html; q = 0.9

INFO:text/plain; q = 0.8

信息:/; q = 0.5

+1

您將不得不攔截您的RESTful服務以查看您的移動請求標頭。 – 2012-01-16 10:08:27

+0

@TheEliteGentleman。我已經添加了接受標題的內容,這是否告訴你什麼? – Marmoy 2012-01-16 11:27:22

回答

2

This post解釋了基於webkit(大多數移動瀏覽器)的瀏覽器,顯然IE也使用接受頭來優先考慮XML而不是HTML。基於這個問題和this SO問題,最好不要僅僅依賴於請求的accept頭,而是將它與URL指定的表示法結合起來。

另一種解決方案是通過將質量屬性附加到@Produces聲明來覆蓋客戶端的接受首選項。如果您使qs大於1:

@Produces({MediaType.TEXT_HTML+";qs=1.1"}) 

瀏覽器客戶端的首選項將被覆蓋。然後,對於需要客戶端的其他內容類型,您必須使qs值更大。我不知道這種做法是否是好的做法,但這是我的一貫做法。

相關問題