2013-03-13 52 views
1

我正在開發一個使用java和glassfish的restful webservice。該web服務消耗JSON。我創建了一個帶有幾個簡單字段的JAXB bean以及其他jaxb bean的嵌套數組。我已經在下面列出了相關的代碼。從嵌套數組上載jaxb bean返回的狀態400

當我使用只填充簡單字段時,web服務接受入站bean,處理它並適當地返回。

當我添加子bean的嵌套數組時,我從服務器返回狀態400 ...我擔心我註釋getter方法的方式可能會影響傳遞給它的整個bean服務器?

我還添加了代碼爲我測試我使用的咖啡豆推到服務器

這裏是web服務的問題的方法簽名:

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

這裏是頂級豆:

@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()); 
+0

你用什麼作爲JSON綁定提供程序?如果您不確定您使用的是哪個應用程序服務器? – 2013-03-13 19:30:45

+0

好的...我現在很近!我刪除了列表的getter方法的兩個註釋,並將ArrayList轉換爲List。我能夠將bean推送到服務器,但現在當列表只包含1個對象時,它會失敗......列表中有2個或更多的條目,它可以工作...請幫助! – cotfessi 2013-03-14 18:37:24

回答

0

你應該用[]數組或列表,而不是ArrayList的嘗試。大多數序列化/反序列化框架不處理具體的集合類。