JAXB对具有嵌套映射的类进行编组

时间:2015-09-15 04:48:20

标签: java jaxb maps

考虑以下Java bean类:

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class ApiRequest {
    private String operation;
    private Map<String, String> params = new HashMap<>();

    SpeApiRequest(String op) {
        operation = op;
    }

    void addParam(String name, String value) {
        params.put(name, value);
    }

    String serializeXml() {
        StringBuilder sb = new StringBuilder();
        sb.append(String.format("<%s>", operation));
        for (Entry<String, String> e: params.entrySet()) {
            sb.append(String.format("<%s>%s</%s>",
                e.getKey(), e.getValue(), e.getKey()));
        }
        sb.append(String.format("</%s>", operation));
        return sb.toString();
    }
}

此类的一个实例如下所示:

ApiRequest req = new ApiRequest("Login");
req.addParam("USERNAME", "myuser");
req.addParam("PASSWORD", "mypasswd");

我希望此对象的序列化XML看起来像这样:

<Login>
    <USERNAME>myuser</USERNAME>
    <PASSWORD>mypasswd</PASSWORD>
</Login>

另一个例子是这样的:

ApiRequest req1 = new ApiRequest("LIST");
req1.addParam("LIST_TYPE", "2");
req1.addParam("VISIBILITY", "1");
req1.addParam("INCLUDE_ALL_LISTS", "true");

此对象的序列化XML如下所示:

<LIST>
    <LIST_TYPE>2</LIST_TYPE>
    <VISIBILITY>1</VISIBILITY>
    <INCLUDE_ALL_LISTS>true</INCLUDE_ALL_LISTS>
</LIST>

如你所见,我的班级可能有不同数量的参数。序列化XML中的根元素的名称与operation相同,嵌套元素来自嵌套在类params中的映射。

目前我正在使用serializeXml()方法以驴方式进行XML序列化,如图所示。

是否可以修改我的JAXB类以将上面显示的对象编组为我想要的内容?

0 个答案:

没有答案