2012-11-15 39 views
0

我使用澤西解析以下JSON:新澤西解組JSON:最後一個元素空不起作用

{"response":{"status":"OK","campaigns":[{"id":12345,"state":"active","code":null}]}}

,但我得到了以下錯誤消息:

java.lang.IllegalArgumentException: No more parsing elements.

如果我切換的領域的代碼和狀態的位置,使得所得到的JSON看起來像

{"response":{"status":"OK","campaigns":[{"id":12345,"code":null,"state":"active"}]}}

一切工作正常。另外,如果我改變在第一JSON的代碼已場內像"code":"test"一個非空值,澤西可以沒有任何問題解析此。我試圖離開陣列的任何元素的最後場當其他更復雜的例子始終得到上述的錯誤消息。

我認爲我做錯了什麼,因爲我無法找到具有同樣問題的任何人。我已經嘗試使用其他JSON符號實現CustomJAXBContextResolver,如自然,但沒有爲我工作。

任何想法?


這裏是我的綁定類:

@XmlRootElement 
public class LoadEntityResponse { 

public LoadEntityResponse() { 
} 

private Response response; 

public Response getResponse() { 
    return response; 
} 

public void setResponse(Response response) { 
    this.response = response; 
} 
} 

public class Response { 

public Response() { 
} 

private String status; 
private String error; 
private String error_id; 

private Campaign[] campaigns; 

public String getStatus() { 
    return status; 
} 

public void setStatus(String status) { 
    this.status = status; 
} 

public String getError() { 
    return error; 
} 

public void setError(String error) { 
    this.error = error; 
} 

public String getError_id() { 
    return error_id; 
} 

public void setError_id(String error_id) { 
    this.error_id = error_id; 
} 

public Campaign[] getCampaigns() { 
    return campaigns; 
} 

public void setCampaigns(Campaign[] campaigns) { 
    this.campaigns = campaigns; 
} 
} 

最後

public class Campaign{ 
public Campaign() { 
} 

protected int id; 
protected String code; 
protected String state; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getCode() { 
    return code; 
} 

public void setCode(String code) { 
    this.code = code; 
} 

public String getState() { 
    return state; 
} 

public void setState(String state) { 
    this.state = state; 
} 
} 

解決:使用JacksonJsonProvider現在:

... 
DefaultClientConfig config = new DefaultClientConfig(); 
config.getClasses().add(JacksonJsonProvider.class); 
... 

這就是所有!

+0

這是澤西島的一個錯誤(http://java.net/jira/browse/JERSEY-1459),它將在1.16版本中修復。正如您所提到的,如果最後一個JSON字段的值爲空,則會出現問題。 –

回答

0

您也可以使用Jackson POJO支持,它附帶jersey-json,但需要進行一些配置,請參閱Jersey User Guide中的POJO support

+0

謝謝。我現在在使用JacksonJsonProvider,它對我來說工作得很好。可惜澤西無法自行處理這個問題。 –

0

嘗試使用Genson http://code.google.com/p/genson/。 要啓用它在客戶端使用下面的代碼:

ClientConfig config = new DefaultClientConfig(); 
config.getClasses().add(GensonJsonConverter.class); 
cli = Client.create(config); 

編輯:在服務器端沒有所需的配置,當罐子在classpath JSON支持自動啓用。

+0

謝謝,我之前試過JacksonJsonProvider,它工作正常。 –