2014-03-04 111 views
3

我使用DropWizard與球衣作出從服務器接受JSON和將其映射到POJO的客戶端。但是,調用客戶端時出現此錯誤。錯誤解析媒體類型「應用/ JSON;編碼= UTF8,字符集= UTF8」

java.lang.IllegalArgumentException: Error parsing media type 'application/json;encoding=utf8, charset=utf-8' 

我的代碼如下:

@Path("/something") 
@Produces(MediaType.APPLICATION_JSON) 
public class SampleClient { 
    final Client client; 
    WebResource.Builder builder; 

    public SampleClient (Client client) { 
    this.client = client; 
    this.builder = client.resource("http://localhost/mysample/service").type("application/json"); 
    } 

    @GET 
    public MyMapper getSomething() { 
    MyMapper result = builder.accept("application/json").get(MyMapper.class); 
    return result; 
    } 
} 

我在做什麼錯?

回答

4

你生成您的客戶端頭?

根據W3C - 4 The Content-Type Header FieldContent-type頭的格式必須爲:

Content-Type := type "/" subtype *[";" parameter] 

其中

parameter := attribute "=" value 

所以你可以有一個解析的媒體類型:

Content-type: application/json; encoding=utf8; charset=utf8 

使用一個半圓而不是逗號。這並不意味着它是正確的,只是可以解析。嘗試使用,而不是:

Content-type: application/json; charset=utf8 

如果這是一個客戶端錯誤,那麼(因爲你不發送任何有效載荷和內容類型是沒有必要的),你可能需要配置Accept頭。嘗試它沒有指定字符集(如果它失敗了,它會因爲另一個原因失敗)。您可以測試使用交互式REST客戶端不同的頁眉和編碼,如Firefox REST client

+0

同時更改'.TYPE(...)'和'。接受(...)''到應用程序/ JSON的; charset = utf8'也沒有幫助。順便說一句我的客戶在消費這個服務:通過'http://opentable.herokuapp.com/api/restaurants名= taj' – Anthony

+0

我知道了。這是服務器返回Content-type中的兩個參數。它適用於Firefox REST客戶端。我會在另一個客戶端查看它。 – helderdarocha

+0

是的,我在Chrome上使用POSTMAN,它向我顯示數據也很好。但是,我的DropWizard/Jersey客戶端由於某種原因無法解析它。 – Anthony