2011-10-19 1 views
0

Jersey REST Webサービスを使用していくつかの問題があります。JAX-RS Webサービスの応答(JSON配列)を正しくアンマーシャリングする方法は?

私は、次のドメインクラスを持っている:

@XmlRootElement 
public class User { 

    private long id; 
    private String email; 
    private String forename; 
    private String role; 

    public User() { 
     // required for JAXB 
    } 

    // + Getters + Setters 
} 

と、次のリソースクラス:

@Produces(MediaType.APPLICATION_JSON) 
@Path("/users") 
public class UserService { 

    @GET 
    public User[] getUsers() { 
     User[] users = ... // Users from DB 
     return users; 
    } 
} 

私は(/ユーザー)そのリソースを要求した場合、私は、次のJSONレスポンスを取得:

{ 
"user": 
[ 
    { 
    "id":"1", 
    "email":"[email protected]", 
    "forename":"Toby", 
    "role":"admin" 
    } 
, 
    { 
    "id":"2", 
    "email":"[email protected]", 
    "forename":"Rob", 
    "role":"developer" 
    } 
] 
} 

私は同じUser.classを持つクライアント側でこのJSONをアンマーシャリングしたい応答を対応するPOJOに返します。つまり、この例では、Userという2つのObjectを取得したいと考えています。

User[] users = gson.fromJson(JSONString, User[].class) 

のような実験的なものをGSONで実行しましたが、動作させることができませんでした。例外:

JSONParseException: Expecting object but found array 

ここで間違っていることを教えてもらえますか?それとも私のjsonフォーマットが問題なの?

編集:hereを述べたように は、コレクション型アダプタの独自の実装でそれを試してみました:

Type usersType = new TypeToken<List<User>>() {}.getType(); 
List<User> users = new ArrayList<User>(); 
users = gson.fromJson(reader, usersType); 

今IAMがJsonParseException取得:

The JsonDeserializer failed to deserialize Json Object {"user":[{"id":"1","email":"[email protected]","forename":"Toby",.... 

答えて

0

それは本当にの形式だったがjsonの反応!このpostの助けを借りて、Object-> XML-> JSONの方法を直接Object-> JSON変換にバイパスし、gsonが解釈可能なきれいなJSON構文に導きました。間もなく私の完全なサンプルソースで答えを更新します。

関連する問題