0

私は、データベースを他の何よりもインターフェースするジャージーベース(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のSimpleRESTクライアント拡張機能を使用しています。

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

ジャージーが「{“ oid”:”…」、“ name”:” Yosemite Sam”、“ email”:” sam@warnerbros.com”、“ addresss”:[{“ street”:”17のようなものを返すことを期待していましたMariposa Way」、「city」:「LosAngeles」、...}、{…}、{…}]}」。

ジャージーがここでやっていないかもしれないことと、それをだましてそれをやらせる方法に誰かが光を当てることができますか?

たくさんの感謝、

ラスベイトマン

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 に答える