2012-06-21 20 views
0

我有一個基於Jersey的(JAX-RS)Web服務,它比其他任何事情都更接口數據庫。 帳戶是含有,所有其他種類的明顯的東西之間的對象,的地址嵌入式陣列(也標有@XmlRootElement):如何欺騙Jersey返回嵌入式數組?

@XmlRootElement 
public class Account 
{ 
    ObjectId oid; 
    String name; 
    String email; 
    ... 
    ArrayList<Address> addresses; 
} 

@XmlRootElement 
public class Address 
{ 
    String street; 
    String city; 
    ... 
} 

在讀取操作中,我從數據庫獲取一個內部地址填寫的帳戶(如在Eclipse中檢查)。當我將它們傳回給我的來電時(請參閱下面的ReST服務代碼),所有帳戶字段顯示,但不是的地址。爲了使請求,並看到這樣的結果,我使用的是簡單的REST客戶擴展到Chrome瀏覽器:

{ 
    "oid":"4fe252a73cc58a6da34eb11f", 
    "name":"Yosemite Sam", 
    "email":"[email protected]" 
    (but no addresses) 
} 

我預計澤西島返回類似「{‘OID’:」 ......」,「名稱「:」優勝美地山姆「,」電子郵件「:」[email protected]「,」地址「:[{」street「:」17 Mariposa Way「,」city「:」Los Angeles「,...}, {...},{...}]}「。

任何人都可以闡明什麼(我認爲)澤西島可能無法在這裏做,以及如何欺騙它做到這一點?

豐富的感謝,

拉斯·貝特曼

AccountService.java

import javax.ws.rs.*; 
... 
@POST 
@Path("/find") 
@Produces({ "application/json", "application/xml" }) 
public Response read(Account account) 
{ 
    Account result; 

    try 
    { 
     result = accountManager.readByEmailOrOid(account); 
    } 
    catch(AppException e) 
    { 
     return e.buildResponse(); 
    } 
    catch(RuntimeException e) 
    { 
     return AppException.buildRuntimeResponse(e); 
    } 

    return Response.ok(result).build(); // result has addresses, but they don't show up! 
} 

回答

0

啊,笨蛋我。一位前同事讓我解決問題。我需要用@XmlElement註釋嵌入式陣列成員。這解決了一切。

@XmlRootElement 
public class Account 
{ 
    ObjectId oid; 
    String name; 
    String email; 
    ... 
    @XmlElement   <------ don't forget this annotation! 
    ArrayList<Address> addresses; 
} 

希望這可以幫助像我這樣的其他可憐的schmuck。