2014-02-27 27 views
0

我正在使用customService bean開發RESservices。我注意到的一件事是,由於某種原因,當我不使用responsewriter對象時,只使用engine.getHttpResponse()。setStatus(404)(例如)設置響應狀態。標頭設置正確(404),但仍有一些html生成。當寫入程序不包含數據時,RESTService返回HTML

我已經嘗試將視圖標記(xpage)上的呈現屬性設置爲false,但似乎沒有辦法。是否有一些關於如何使用CustomServiceBean並不返回任何數據的文檔?

+1

產生什麼HTML?你能顯示代碼(XPage)嗎? –

回答

2

設置狀態創建HTML螞蟻錯誤狀態是一個好方法,因此API很容易處理。但是,您想考慮:

  • 將內容類型設置爲實際將呈現的內容類型(如果您有結果)。如果您未設置response.contenttype,則默認爲HTML
  • 404適用於導航/網址。由於您的XPage呈現結果,請求找到了有效的URL。基於用戶和/或參數沒有結果,因此不是4xx類錯誤,而是5xx。選擇其中一個。
  • 測試使用wget或捲曲時,這樣你就可以確保瀏覽器不會做HTML

讓我們知道如何去

+0

設置內容類型確實是正確的答案。我所做的是創建一個負責輸出格式的類。所以當客戶端請求json時,我會調用一個不同的'輸出處理程序'。如果noe內容類型被請求,json將是默認的。 添加內容類型標題後,我的問題得到解決,但偶爾鉻仍然認爲它的HTML。現在我認爲這是Chrome中的一個bug,因爲Restclient正在接收純數據和100%的json。 – jjtbsomhorst

1

我認爲返回一個404響應會導致總是HTML數據,因爲它通常會給出錯誤消息等。 如果您不想回應任何數據只是返回一個空的JSON對象 - 因爲我認爲您返回JSON時你有數據,對吧?

+0

mmm,某種程度上感覺不對。當服務返回404時,意味着找不到找到的東西。返回一個空的json對象可能會導致客戶認爲還有一些東西可以解析,事實並非如此。 我已經玩了一下httpservletresponse對象,它似乎在使用restclient項目(http://xpag.es/?1CCA)時實際上沒有創建響應,但瀏覽器只是添加了默認的html它在響應頭沒有被設置時。 – jjtbsomhorst

+0

所以也許這是瀏覽器端的「問題」。在IE * grml * –

+0

中想到這種愚蠢的「友好的錯誤信息」好吧,現在我知道你的意思了:該服務提供了一個空的響應,導致瀏覽器將其解釋爲HTML。因此,您可能會將此問題傳遞給@pdhannan –

1

不要設置404種狀態,這種情況下設置爲null,像404分的手段爲

+0

這不會提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – mah

+2

@mah - 實際上,這**是**的答案。如果您想對其準確性提出異議,請這樣做 - 但請不要發表形式評論,這表明您沒有真正閱讀您正在評論的問題和答案。 –

+0

@ChrisStratton我沒有發表評論手動,甚至沒有意識到它已經完成 - 必須是採取審查行動的結果。如果我錯了這個帖子是一個答案,那就這樣吧(這就是爲什麼行動需要投票,我們都有能力讓它錯誤)。 – mah

相關問題