0

次の JSON を解析するために Jersey を使用しています。

{"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フィールドを のようなnull 以外の値に変更すると"code":"test"、Jersey はこれを問題なく解析できます。配列nullの要素の最後のフィールドを離れると、常に上記のエラーメッセージが表示される他のより複雑な例を試しました。

同様の問題を抱えている他の人を見つけることができなかったので、私は何か間違ったことをしていると思います。自然のような他の 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);
...

それで全部です!

4

2 に答える 2

0

Genson http://code.google.com/p/genson/を使用してみてください。クライアント側で有効にするには、次のコードを使用します。

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

EDIT : サーバー側では、jar がクラスパスにある場合、json サポートが自動的に有効になるため、構成は必要ありません。

于 2012-11-15T11:20:30.933 に答える
0

付属の Jackson POJO サポートを使用することもできますがjersey-json、いくつかの構成を行う必要があります。Jersey User GuideのPOJO サポートを参照してください。

于 2012-11-15T12:11:06.330 に答える