考虑以下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类以将上面显示的对象编组为我想要的内容?