如何欺骗泽西岛返回嵌入式阵列?

时间:2012-06-21 14:39:03

标签: json jersey

我有一个基于泽西岛(JAX-RS)的Web服务,它可以连接数据库,而不是其它任何东西。 帐户是一个对象,其中包含所有其他类型的明显内容,地址的嵌入式数组(也标有 @XmlRootElement ):

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

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

在读取操作中,我从数据库中获取了一个内部有地址的填写帐户(在Eclipse中检查过)。当我将它们传递给我的来电者时(请参阅下面的ReST服务代码),所有帐户字段都会显示,但不是地址。要发出请求并查看结果,我正在使用Chrome的简单REST客户端扩展程序:

{
    "oid":"4fe252a73cc58a6da34eb11f",
    "name":"Yosemite Sam",
    "email":"sam@warnerbros.com"
    (but no addresses)
}

我希望泽西岛返回类似“{”oid“:”......“,”name“:”Yosemite Sam“,”email“:”sam @warnerbros.com“,”地址“:[{”street“ :“17 Mariposa Way”,“city”:“洛杉矶”,......},{...},{...}]}“。

任何人都可以了解一下(我认为)泽西岛可能无法在这里做什么,以及如何欺骗它呢?

非常感谢,

Russ Bateman

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!
}

1 个答案:

答案 0 :(得分:0)

啊,假我。一位前同事让我接受了解决方案。我需要用 @XmlElement 注释嵌入式数组成员。这解决了一切。

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

希望这有助于像我这样的其他可怜的笨蛋。