0

私は、逆シリアル化のためにジャージーとジャクソンを使用して安らかなサービスを書いています。私はSpringを依存性注入にcom.sun.jersey.spi.spring.container.servlet.SpringServlet使用しています.mvcを使用していません. クライアント側で RestyGWT を使用しています。サービスからオブジェクトの配列を返しています。クライアントは、有効な JSON ドキュメントではないと不平を言っています。サービスが返すものは次のとおりです。

   {
    "0": {
        "type": "AQUISITION_DT",
        "value": "2013-2-1",
        "stats": {
            "total": 91,
            "used": 4
        }
    },
    "1": {
        "type": "AQUISITION_DT",
        "value": "2013-1-1",
        "stats": {
            "total": 24,
            "used": 13
        }
    }
}

よくわかりませんが、問題は各要素がそのインデックスでラップされていることだと思います。ジャージーまたはジャクソンに配列要素のラップを解除するように指示する方法はありますか? さらに情報を提供する必要がある場合はお知らせください。

コードでは、次のように結果を JSONWithPadding オブジェクトとして送り返しています。return new JSONWithPadding(array, callback);

web.xmlところで、 POJO マッピングを使用するように jersey を既に構成しています。

<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

更新 端末からcurlを使用してテストを行ったところ、返された文字列は正しいように見えます(コールバックエンクロージャを削除しました):

 {
    {
        "type": "AQUISITION_DT",
        "value": "2013-2-1",
        "stats": {
            "total": 91,
            "used": 4
        }
    },
    {
        "type": "AQUISITION_DT",
        "value": "2013-1-1",
        "stats": {
            "total": 24,
            "used": 13
        }
    }
}

最初に投稿した文字列は、restyGWT によって報告されています。紛らわしい投稿で申し訳ありませんが、なぜ restyGwt が不平を言っているのかわかりません...

ありがとう!

4

2 に答える 2

0

オブジェクトの配列を返したい場合、json 形式は次のようになります。

[
   {
      "type":"AQUISITION_DT",
      "value":"2013-2-1",
      "stats":{
         "total":91,
         "used":4
      }
   },
   {
      "type":"AQUISITION_DT",
      "value":"2013-1-1",
      "stats":{
         "total":24,
         "used":13
      }
   }
]

以下のように、リソースメソッドで簡単に配列を返すことができます

@Path("/test")
@GET        
@Produces(MediaType.APPLICATION_JSON)
public Test[] haha(){
    Test[] arr = new Test[3]; 
    arr[0] = new Test();
    arr[1] = new Test();
    arr[2] = new Test();
    return arr;
}

Test クラスは以下のような場所です

public class Test {
    public String type="AQUISITION_DT"; 
    public String value = "2013-2-1";
    public Stats stats = new Stats();
}

public class Stats {
    public int total = 10;
    public int used = 13;
}
于 2013-05-06T03:09:14.193 に答える