我已经解析了以下对象,没有任何问题:

<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

最佳答案

您的班级是否命名为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;

    }
}

10-02 11:36