У меня возникли проблемы с использованием веб-служб Jersey REST.
У меня есть следующий класс домена:
@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;
}
}
ЕслиЯ запрашиваю у этого ресурса (/ users) следующий ответ json:
{
"user":
[
{
"id":"1",
"email":"Toby@email.com",
"forename":"Toby",
"role":"admin"
}
,
{
"id":"2",
"email":"Rob@email.com",
"forename":"Rob",
"role":"developer"
}
]
}
На стороне клиента (где у меня тот же класс User.class) я хочу отменить отправку этого ответа JSON обратно в соответствующие POJO,Это означает, что в этом примере я хотел бы получить два объекта типа User.Я сделал несколько экспериментальных вещей с GSON, таких как
User[] users = gson.fromJson(JSONString, User[].class)
, но не смог заставить его работать.Исключение:
JSONParseException: Expecting object but found array
Может кто-нибудь сказать мне, что я здесь делаю неправильно?Или проблема в моем формате json?
Редактировать: Пробовал с собственной реализацией адаптера типа коллекции, как упомянуто здесь :
Type usersType = new TypeToken<List<User>>() {}.getType();
List<User> users = new ArrayList<User>();
users = gson.fromJson(reader, usersType);
Теперь я получаю JsonParseException:
The JsonDeserializer failed to deserialize Json Object {"user":[{"id":"1","email":"Toby@email.com","forename":"Toby",....