2011-10-19 24 views
0

我使用Jersey REST webservices时遇到了一些问题。如何正确解组JAX-RS Webservice响应(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。这意味着在这个例子中,我想获得两个类型的用户对象。我用GSON做了一些实验性的东西,比如

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

但是无法让它工作。例外:

JSONParseException: Expecting object but found array 

任何人都可以告诉我什么Iam在这里做错了吗?或者是我的JSON格式的问题?

编辑: 用自己的实现集合类型的适配器试了一下提到here

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":"[email protected]","forename":"Toby",.... 

回答

0

果然是格式JSON响应!在这个post的帮助下,我绕过了Object-> XML-> JSON的方式直接实现了Object-> JSON转换,这导致了由gson解释的干净的JSON语法。将尽快用我的完整示例源更新答案。