Spring 4 REST 程序使用 JAXB 返回 XML 中的列表

2023-11-24

我正在尝试使用 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 上运行。

需要帮助。谢谢。


我能够生成客户列表的 XML。

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

通用包装类:

@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;
    }

修改后的 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;
}

XML 响应:

<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>

Note :

生成的XML的根元素是entityList(取自包装类的名称)

但是,我希望 XML 根元素应该是实体名称的复数,即顾客在这种情况下。

有什么想法或建议吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 4 REST 程序使用 JAXB 返回 XML 中的列表 的相关文章

随机推荐

  • 当作用域被销毁时,我是否需要“取消监视”作用域变量?

    以下是来自 Angular 的文档 我正在观察属于此范围的几个变量 以构建过滤字符串ng grid 当这个作用域被销毁时 我是否需要通过调用返回值来取消监视它们 scope watch 或者范围的破坏足以解决这个问题吗 如果正在监视的变量不
  • webkit/chrome Web Inspector 资源检查如何工作?

    我总是想知道如何资源检查从事 webkit safari chrome Web Inspector 工作 浏览器必须提供本机 BPI 或 JavaScript 的某些内容来显示查询列表及其时间线 二进制 API 称为什么 我可以使用相同的
  • 编写 cypress 测试时如何选择同名的 div 元素

    我正在使用 cypress 为我们的新应用程序创建 E2E 测试 该应用程序有一个菜单 其中包含用于在地图屏幕上显示不同数据的按钮 所有这些按钮都有相同的 div 名称 我可以通过输入按钮的文本名称来区分 cy get div sb ite
  • 如何在django中自动更改模型字段

    我有一个模型 我想知道是否可以设置触发模型字段更改的条件 例如 我有一个模型 class BillboardTracker models Model client name models CharField max length 400 e
  • 从java在mysql中创建数据库

    你能帮忙解决这个问题吗 我正在尝试创建并使用一个名为 TIGER 的数据库 如果我在 MySQL 中创建数据库并且它运行完美 那么我没有问题 我想做的是从 Java 创建它 这样 当代码第一次运行时 它会创建数据库作为初始启动的一部分 如果
  • 5000:类“..”必须是“flash.display.MovieClip”的子类,因为它链接到该类型的库元件

    这是带有完整路径的标题错误 psf Home Dropbox Development Repositories GIT i cc Powerhouse Notes master flash lib libnote NotesCore as
  • 来自 AXUIElement 的 CGWindowID

    我正在尝试使用辅助功能 API 自动化外部 OSX 应用程序 一些 应用程序的状态无法通过 API 获得 因此我通过以下方式获取它 屏幕刮擦 为此 我需要获取可访问性对象的 CGWindowID 窗口角色 有没有直接的方法来获取 窗口角色
  • Json.NET 可以反序列化带有点表示法的扁平化 JSON 字符串吗?

    我有一个扁平化的 JSON CaseName John Doe v State CaseDate
  • 文本下划线并留有空格。可以通过 html 和 css 实现吗?

    我花了几个小时在这上面 我试图描述所附图片上的问题 需要用白线包裹文本 行与文本之间留有一些空格 我想到的第一个解决方案 只是使用 smth 行 margin top 20px 将文本放在线上并为文本容器提供自定义背景 例如灰色 但这不是解
  • Android位图imageview内存泄漏

    我将 4x4 imageView 放入活动 BoardActivity 中 用户可以通过单击它们来更改图像 使用 HTC Desire Android 2 2 2 我在大约 30 分钟的密集使用中遇到 OOM 内存不足 编辑 此活动第 16
  • 从 Office 加载项启动 WPF 窗口

    我创建了一个 Office 加载项 其中包含 WPF 应用程序的实例 当用户单击加载项上的按钮时 我通过执行以下操作来启动不同的窗口 MyViewModel viewModel new MyViewModel string infoFrom
  • 使用 Pandas 替换数据框列中的特定值

    我有一个数据框 df 其中有一列名为 Num of employees 其值例如 50 100 200 500 等 我发现数据中值很少的问题 如果员工编号应为 1 10 则数据为 10 Jan 此外 只要值应为 11 50 数据就会显示为
  • 字母、数字和 - _ 的正则表达式

    我在检查 PHP 中的值是否为以下任意组合时遇到问题 字母 大写或小写 数字 0 9 下划线 dash 观点 没有空间 或其他字符 举几个例子 好的 screen123 css 好的 屏幕新文件 css 好的 screen new js 不
  • 如何自动将文本附加到使用 JavaScript 复制的文本[重复]

    这个问题在这里已经有答案了 在 JavaScript 中 如何选择网站上的文本 复制它 通过 Control C Command C 或编辑复制 并让 JavaScript 将一两行添加到剪贴板 以便当用户粘贴时 他们复制的内容是显示以及额
  • 如何将main.xml拆分为其他xml?

    我有 main xml 并且是一个非常大的文件 我想将一些组件 一些布局 拆分为其他 xml 以便我可以从 main xml 本身进行链接 这可以从 Android 实现吗 你可以用这个
  • C/C++ __restrict 类型

    有没有一种方法可以使用 typedef 整型 浮点类型来定义 这意味着没有别名 相当于 但原始构造 template lt typename T gt struct restrict T restrict data 作为相关问题 是否可以询
  • 何时使用tick(')进行Verilog数组初始化?

    数组初始化可以通过或不通过 int a 8 0 1 2 3 4 5 6 7 Packed int b 8 0 1 2 3 4 5 6 7 Unpacked 有没有correct方式 假设数组使用不可打包的类型 例如int string ET
  • java中字符串转整数时如何检测溢出

    如果我想在java中将字符串转换为int 你知道我是否有办法检测溢出吗 我的意思是字符串文字实际上代表一个大于 MAX INT 的值 java doc没有提到它 它只是说如果字符串不能被解析为整数 它将通过 FormatException
  • 异常消息是否应该全球化

    我正在开发一个项目 并且刚刚开始完成全球化应用程序所需的所有工作 经常出现的一件事是是否全球化异常消息 但要确保 string Format 使用 CultureInfo CurrentCulture 而不是 CultureInfo Inv
  • Spring 4 REST 程序使用 JAXB 返回 XML 中的列表

    我正在尝试使用 Spring 4 实现 REST 服务 REST 方法将返回 XML 格式的客户对象列表 该应用程序是注释驱动的 对于 XML 我使用了 JAXB 注释 根据我的理解 Spring 在找到 JAXB 注释时将立即使用 Jax