Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4REST程序使用JAXB返回XML格式的列表_Java_Xml_Spring_Rest_Jaxb - Fatal编程技术网

Java Spring4REST程序使用JAXB返回XML格式的列表

Java Spring4REST程序使用JAXB返回XML格式的列表,java,xml,spring,rest,jaxb,Java,Xml,Spring,Rest,Jaxb,我正在尝试使用Spring4实现REST服务 REST方法将返回XML格式的客户对象列表。 应用程序是注释驱动的 对于XML,我使用了JAXB注释。 根据我的理解,Spring在找到JAXB注释时将使用“Jaxb2RootElementHttpMessageConverter” 客户POJO: @XmlRootElement(name = "customer") public class Customer { private int id; private String name; privat

我正在尝试使用Spring4实现REST服务

REST方法将返回XML格式的客户对象列表。 应用程序是注释驱动的

对于XML,我使用了JAXB注释。 根据我的理解,Spring在找到JAXB注释时将使用“Jaxb2RootElementHttpMessageConverter”

客户POJO:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
我已经将REST服务类注释为@RestController(根据Spring4)

返回XML格式客户列表的REST方法:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
@RequestMapping(value=“/customer list.xml”,products=“application/xml”)
公共列表getCustomerListInXML(){
List customerList=new ArrayList();
Customer customerObj1=新客户();
customerObj1.setId(1);
customerObj1.setName(“Vijay”);
ArrayList favBookList1=新的ArrayList();
favBookList1.添加(“账簿1”);
favBookList1.添加(“账簿2”);
customerObj1.setFavBookList(favBookList1);
customerList.add(customerObj1);
Customer customerObj2=新客户();
customerObj2.setId(2);
customerObj2.setName(“Rajesh”);
ArrayList favBookList2=新的ArrayList();
favBookList2.添加(“第3册”);
favBookList2.添加(“第4册”);
customerObj2.setFavBookList(favBookList2);
customerList.add(customerObj2);
返回客户列表;
}
当我点击URL时,我预期的结果:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>

第一册
第二册
维杰
第三册
第四册
拉杰什
我得到的:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
HTTP 406: 此请求标识的资源只能根据请求“接受”标头生成具有不可接受特征的响应

注意:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
当我尝试以XML返回Customer对象时,它会按预期工作。 但是,我无法返回XML格式的客户对象列表

该应用程序是使用Java7开发的,并在Tomcat7上运行

我需要帮助。谢谢

406不可接受请求标识的资源仅能够根据请求中发送的接受报头生成具有不可接受内容特征的响应实体

后端服务正在响应未提供其返回的响应类型/或请求中的
Accept-type HTTP头中的响应类型不同

找出服务器返回的响应内容类型。 在请求HTTP Accept标头值中提供此内容类型。 HTTP状态代码

其他观察结果我认为应该使用参数化列表类型

private List<String> favBookList; 
public List<String> getFavBookList() {
   return favBookList;
}
public void setFavBookList(List<String> favBookList) {
   this.favBookList = favBookList;
}
私有列表favBookList;
公共列表getFavBookList(){
返回favBookList;
}
公共作废设置favBookList(列表favBookList){
this.favBookList=favBookList;
}

我能够生成客户列表的XML

首先创建一个泛型包装类(其目的是使用这个泛型类来传递任何类的对象列表)

通用包装类:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
@XmlRootElement
@XMLSEEALSE({Customer.class})
公共类实体列表{
实体对象的私有列表;
公共实体列表(){
listOfEntityObjects=new ArrayList();
}
公共实体列表(实体对象列表){
this.listOfEntityObjects=listOfEntityObjects;
}
@XmlAnyElement
公共列表getItems(){
返回实体对象列表;
}
修改后的REST方法:

@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  EntityList<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    EntityList<Customer> listOfCustomers =   
    new EntityList<Customer>  (customerList);

    return listOfCustomers;
}
@RequestMapping(value=“/customer list.xml”,products=“application/xml”)
公共实体列表getCustomerListInXML(){
List customerList=new ArrayList();
Customer customerObj1=新客户();
customerObj1.setId(1);
customerObj1.setName(“Vijay”);
ArrayList favBookList1=新的ArrayList();
favBookList1.添加(“账簿1”);
favBookList1.添加(“账簿2”);
customerObj1.setFavBookList(favBookList1);
customerList.add(customerObj1);
Customer customerObj2=新客户();
customerObj2.setId(2);
customerObj2.setName(“Rajesh”);
ArrayList favBookList2=新的ArrayList();
favBookList2.添加(“第3册”);
favBookList2.添加(“第4册”);
customerObj2.setFavBookList(favBookList2);
customerList.add(customerObj2);
EntityList客户列表=
新实体列表(客户列表);
返回客户名单;
}
XML响应:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>

第一册
第二册
维杰
第三册
第四册
拉杰什
注意:

@XmlRootElement(name = "customer")
public class Customer {
private int id;
private String name;
private List favBookList;
@XmlAttribute
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
@XmlElement
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@XmlElementWrapper(name = "booklist")
@XmlElement(name="book")
public List getFavBookList() {
    return favBookList;
}
public void setFavBookList(List favBookList) {
    this.favBookList = favBookList;
}
} 
@RequestMapping(value="/customer-list.xml",produces="application/xml")
public  List<Customer> getCustomerListInXML(){
    List<Customer> customerList = new ArrayList<Customer>();
    Customer customerObj1 = new Customer();
    customerObj1.setId(1);
    customerObj1.setName("Vijay");
    ArrayList<String> favBookList1 = new ArrayList<String>();
    favBookList1.add("Book1");
    favBookList1.add("Book2");
    customerObj1.setFavBookList(favBookList1);
    customerList.add(customerObj1);
    Customer customerObj2 = new Customer();
    customerObj2.setId(2);
    customerObj2.setName("Rajesh");
    ArrayList<String> favBookList2 = new ArrayList<String>();
    favBookList2.add("Book3");
    favBookList2.add("Book4");
    customerObj2.setFavBookList(favBookList2);
    customerList.add(customerObj2);
    return customerList;
}
 <customers>
  <customer id="1">
   <booklist>
    <book xsi:type="xs:string">Book1</book>
    <book xsi:type="xs:string">Book2</book>
   </booklist>
   <name>Vijay</name>
  </customer>
  <customer id="2">
   <booklist>
    <book xsi:type="xs:string">Book3</book>
    <book xsi:type="xs:string">Book4</book>
   </booklist>
   <name>Rajesh</name>
  </customer>
 </customers>
@XmlRootElement
@XmlSeeAlso({Customer.class})
public class EntityList<T> {

 private List<T> listOfEntityObjects;

    public EntityList() {
        listOfEntityObjects = new ArrayList<T>();
    }

    public EntityList(List<T> listOfEntityObjects) {
        this.listOfEntityObjects = listOfEntityObjects;
    }

    @XmlAnyElement
    public List<T> getItems() {
        return listOfEntityObjects;
    }
<entityList>
 <customer id="1">
  <booklist>
   <book xsi:type="xs:string">Book1</book>
   <book xsi:type="xs:string">Book2</book>
  </booklist>
  <name>Vijay</name>
 </customer>
 <customer id="2">
  <booklist>
   <book xsi:type="xs:string">Book3</book>
   <book xsi:type="xs:string">Book4</book>
  </booklist>
  <name>Rajesh</name>
 </customer>
</entityList>
生成的XML的根元素是entityList(取自包装器类的名称)

但是,我希望XML根元素应该是实体名称的复数形式,即在本例中为customers


有什么想法或建议吗?

我使用Firefox“检查网络请求”来检查请求和响应头。请求头接受类型是text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8,响应头内容类型是text/html;charset=utf-8(我认为这是由于我得到的HTTP状态406 html页面)。当我返回XML格式的Customer对象时,请求标头中的accept类型与上面相同,响应标头中的内容类型为application/XML(在本例中,我可以看到生成的XML)。我根据您的建议使用了参数化的列表类型。它删除了xsi:type=“xs:string”正如我所希望的那样,从标记开始。谢谢你的建议。也许你可以使用
@xmltransive
注释。它基本上阻止了字段/属性的映射。更多信息@xmltransive注释有不同的用途。在我的情况下,我希望将客户视为根元素,而不是entityList。比如说,将来,我有一个tity称为Car,我可以重用这个通用包装器,我应该将cars作为xml中的根元素