使用 JAXB 的动态标记名称 [英] Dynamic tag names with JAXB

查看:38
本文介绍了使用 JAXB 的动态标记名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Jersey 和 JAXB 来构建一个简单的 RESTful web 服务我有一个 'String' 到 'Integer' 的 HashMap:

I am using Jersey and JAXB to build a simple RESTful webservice I have a HashMap of 'String' to 'Integer':

2010-04 -> 24 
2010-05 -> 45

我需要生成一个如下所示的 XML 响应:

I need to generate an XML response which looks like this:

 <map>
   <2010-04>24</2010-04>
   <2010-05>45</2010-05>
 </map>

使用 JAXB 生成动态标记名称的最佳方法是什么?

What is the best way to generate dynamic tag names with JAXB?

推荐答案

您可以使用带有 @XmlAnyElement 注释的属性并将元素作为 JAXBElements 返回:

You can use an @XmlAnyElement-annotated property and return the elements as JAXBElements:

private Map<String, Integer> months = ...;

@XmlAnyElement
public List<JAXBElement<Integer>> getMonths() {
    List<JAXBElement<Integer>> elements = new ArrayList<JAXBElement<Integer>>();
    for (Map.Entry<String, Integer> month: months.entrySet()) 
        elements.add(new JAXBElement(new QName(month.getKey()), 
                                     Integer.class, month.getValue()));
    return elements;
}

这种方法很丑,但并不比它生成的 XML 更丑.

This approach is ugly, but not uglier than the XML it produces.

这篇关于使用 JAXB 的动态标记名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆