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",....