1

JavaとGlassfishを使用してRESTfulWebサービスを開発しています。WebサービスはJSONを消費します。他のjaxbBeanのネストされた配列とともに、いくつかの単純なフィールドを持つJAXBBeanを作成しました。以下に関連するコードを含めました。

Beanに単純なフィールドのみを入力すると、Webサービスは着信Beanを受け入れ、それを処理して適切に返します。

サブBeanのネストされた配列を追加すると、サーバーからステータス400が返されます... getterメソッドに注釈を付ける方法が、サーバーに渡されるときにBean全体に影響を与える可能性があるのではないかと心配しています。

Beanをサーバーにプッシュするために使用しているテスターのコードも追加しました

問題のWebサービスのメソッドシグネチャは次のとおりです。

@POST
@Path( "test1" )
@Consumes( MediaType.APPLICATION_JSON )
public Response createRecord( JAXB_ExampleBean track )

これがトップレベルのBeanです。

@XmlRootElement( name = "example" )
@XmlType( propOrder = { "id", "idCreator", "title", "revList" } )
public class JAXB_ExampleBean
{
private long id = 0;
private long idCreator;
private String title;
private ArrayList<JAXB_ExampleRevBean> revList;

@XmlElementWrapper( name = "exampleList" )
@XmlElement( name = "exampleRevision" )
public ArrayList<JAXB_ExampleRevBean> getRevList()
{
    return revList;
}

    // other getters/setters omitted for brevity no additional annotations on them

}

ネストされたBeanは次のとおりです。

@XmlRootElement( name = "exampleRevision" )
@XmlType( propOrder = { "id", "idExample", "idAuthor", "revOrder" } )
public class JAXB_ExampleRevBean
{
private long id = 0;
private long idExample;
private long idAuthor;
private int revOrder;

    // getters/setters omitted for brevity no additional annotations on them
}

テスターコードは次のとおりです。

WebResource webResource = client.resource( "http://example.com/resources/meta/test1" );

JAXB_ExampleBean beanToUpload = buildExampleBeanToSend();

ClientResponse response = webResource.type( "application/json" ).post( ClientResponse.class, beanToUpload );
if( response.getStatus() != 201 )
   throw new RuntimeException( "Failed : HTTP error code : " + response.getStatus() );
4

1 に答える 1

0

Arraylist の代わりに array [] または List を試してみてください。シリアライゼーション/デシリアライゼーション フレームワークのほとんどは、具体的なコレクション クラスを処理しません。

于 2013-03-13T18:31:50.743 に答える