0

我有一个基于 Jersey 的 (JAX-RS) Web 服务,它与数据库的接口比它所做的任何其他事情都多。Account是一个对象,其中包含一个嵌入的Address数组(也用@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 的Simple REST Client扩展:

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

我预计泽西岛会返回类似“{“oid”:“......”,“名称”:“Yosemite Sam”,“电子邮件”:“sam@warnerbros.com”,“地址”:[{“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!
}
4

1 回答 1

0

啊,骗我。一位前同事让我提出了解决方案。我需要用@XmlElement注释嵌入的数组成员。这解决了一切。

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

希望这可以帮助像我这样的其他可怜的笨蛋。

于 2012-06-21T15:41:14.293 回答