注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2 (JSR-222)专家组的成员。
下面是如何使用 EclipseLink JAXB (MOXy) 中的 JSON 绑定来支持此用例。
Java 模型(根)
下面是我将用于此示例的 Java 模型。
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private List<String> channels = new ArrayList<String>();
@XmlElementWrapper
@XmlElement(name="channel")
public List<String> getChannels() {
return channels;
}
}
将 MOXy 指定为 JAXB 提供程序 (jaxb.properties)
要将 MOXy 指定为您的 JAXB 提供者,您需要包含一个jaxb.properties
在与您的域模型相同的包中调用的文件,其中包含以下条目(请参阅:):
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示代码
在下面的演示代码中,我们将向 XML 和 JSON 输出相同的实例。
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Root root = new Root();
root.getChannels().add("Test A");
root.getChannels().add("Test B");
// Output XML
marshaller.marshal(root, System.out);
// Output JSON
marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
marshaller.marshal(root, System.out);
}
}
输出
下面是运行演示代码的输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<channels>
<channel>Test A</channel>
<channel>Test B</channel>
</channels>
</root>
{
"channels" : [ "Test A", "Test B" ]
}
了解更多信息