2013-03-13 63 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的尝试。大多数序列化/反序列化框架不处理具体的集合类。