我已经解析了以下对象,没有任何问题:
<response>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</response>
这样的课程:
@XmlRootElement(name="myObject")
public class MyObject{
@XmlElement(name="id")
long id;
@XmlElement(name="name")
String name;
/* getters and setters ... etc.. */
}
这很好用,通过我的API调用,我得到了MyObjects
的预期列表。
但是如何处理这种类型的响应:
<response>
<objectWrapper>
<myObject>
<id>1</id>
<name>abc</name>
</myObject>
<myObject>
<id>2</id>
<name>def</name>
</myObject>
</objectWrapper>
</response>
起初我认为构建一个ObjectWrapper
类可以解决这个问题:
@XmlRootElement(name="objectWrapper")
public class ObjectWrapper{
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
然后我考虑过使用@XmlElementWrapper
,但是怎么样?
我可以从课程中删除@XmlRootElement
和列表中的广告@XmlElementWrapper
吗?
编辑:不,我无法移除@XmlRootElement
答案 0 :(得分:1)
您可以这样写:
@XmlRootElement(name="response")
public class Response {
@XmlElementWrapper(name="objectWrapper")
@XmlElement(name="myObject")
List<MyObject> myObject;
/* getters and setters ... etc.. */
}
您不需要ObjectWrapper
课程。
答案 1 :(得分:1)
如果您的班级名为ObjectWrapper
,则无关紧要。
您需要在@XmlElementWrapper
objectWrapper
中指定正确的包装器名称。
您的ObjectWrapper
课程应如下所示:
@XmlRootElement( name = "response" )
@XmlAccessorType( XmlAccessType.FIELD )
public class ObjectWrapper
{
@XmlElementWrapper( name = "objectWrapper" )
@XmlElement( name = "myObject" )
private List<MyObject> myObjects;
public void setMyObjects( List<MyObject> objects )
{
this.myObjects = objects;
}
public List<MyObject> getMyObjects()
{
return myObjects;
}
}