2011-10-13 61 views
0

我正在嘗試使用分塊編碼來讀取一些REST服務的信息。Java REST分塊編碼

String encodedURL = URLEncoder.encode(url, "UTF-8"); 
WebClient client = org.apache.cxf.jaxrs.client.WebClient.create(encodedURL).accept("text/html"); 
Response response = client.get(); 

響應包含狀態,元數據和實體。所述元數據包含以下信息:

{日期= [星期四,2011 10月13日13時27分02秒GMT],會發生變化= [接受編碼, 用戶代理],傳送編碼= [分塊] ,Keep-Alive = [timeout = 15, max = 100],Content-Type = [text/html;字符集的字符集= = UTF-8], 連接= [保持活動],X-PAD = [避免瀏覽器錯誤], 服務器= [阿帕奇/ 2.2.3(Linux的/ SUSE)]}

並且該實體包含sun.net.www.protocol.http.HttpURLConnection $ HttpInputStream類型的實例。

我過去,我一直在使用的下面的代碼行,以獲得整個結果字符串:

String resultString = client.get(String.class); 

但不知何故,此行會拋出異常:

。讀取響應消息類時出現問題:class java.lang.String,ContentType:text/html; charset = charset = UTF-8。 org.apache.cxf.jaxrs.client.ClientWebApplicationException:.Problem 讀取響應消息,類:class java.lang.String, ContentType:text/html; charset = charset = UTF-8。

...引起的:

引起:java.io.UnsupportedEncodingException:字符集= UTF-8處 java.io.InputStreamReader中 sun.nio.cs.StreamDecoder.forInputStreamReader(未知來源) 。(Unknown Source)at org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:180)at org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:166)at org.apache .cxf.jaxrs.provider.PrimitiveTextProvider.readFrom(PrimitiveTextProvider.java:51) at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:435) ... 49 mo re

是否有直接的解決方案來獲取響應的全部內容?

謝謝!

KON

回答

1

恐怕在服務器端發送的垃圾,導致要在客戶端拋出的異常。

問題片段是Content-type HTTP頭信息。它被設置爲:

text/html; charset=charset=UTF-8 

正如你所看到的,這個詞字符集重複。因此,您的客戶端嘗試使用名爲charset=UTF-8的編碼進行解碼,當然這不存在。

如果問題在服務器端修復,最好的解決方案是。但我不知道你是否可以在那裏修復它。如果不是,下一個最好的方法是在嘗試獲取響應內容之前嘗試修復HTTP標頭。

+0

謝謝科多!我完全錯過了這一點。 – kon

2

您可以使用

@Produces("application/json; charset=UTF-8") 

註釋爲JAX-RS服務