我正在尝试使用 Spring 4 实现 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;
}
}
我已将 REST 服务类注释为 @RestController (根据 Spring 4)
以 XML 形式返回客户列表的 REST 方法:
@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;
}
当我点击 URL 时,得到了我预期的结果:
<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>
我得到什么:
HTTP 406:
该请求所标识的资源只能生成具有根据请求“接受”标头不可接受的特征的响应。
Note :
当我尝试以 XML 形式返回 Customer 对象时,它按预期工作。
但是,我无法返回 XML 格式的 Customer 对象列表。
该应用程序使用 java 7 开发,在 Tomcat 7 上运行。
需要帮助。谢谢。