簡體   English   中英

如何正確解組JAX-RS Web服務響應(JSON數組)?

[英]How to unmarshall JAX-RS Webservice response (JSON Array) correctly?

使用Jersey REST Web服務時遇到一些問題。

我有以下域類:

@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":"Toby@email.com",
   "forename":"Toby",
   "role":"admin"
  }
 ,
  {
   "id":"2",
   "email":"Rob@email.com",
   "forename":"Rob",
   "role":"developer"
  }
 ]
}

在客戶端(我有相同的User.class),我想將此JSON響應編組回對應的POJO。 這意味着在此示例中,我想獲取兩個類型為User的Object。 我對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",....

確實是json響應的格式! 在這篇文章的幫助下,我繞過了Object-> XML-> JSON方式直接進行Object-> JSON轉換,這導致了由gson可以解釋的干凈JSON語法。 將很快用我完整的示例源更新答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM