Uwaga: Jestem EclipseLink JAXB (MOXy) ołowiu i członkiem grupy JAXB 2 (JSR-222) ekspertów.
Poniżej przedstawiono sposób obsługi tego przypadku użycia za pomocą powiązania JSON w EclipseLink JAXB (MOXy).
Java model (korzeń)
Poniżej jest model Java, która będzie używać do tego przykładu.
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;
}
}
Określ Moxy jako dostawca JAXB (jaxb.properties)
Aby określić Moxy jako dostawcę JAXB trzeba dołączyć plik o nazwie jaxb.properties
w tym samym opakowaniu jak model domeny z następujących wejście (patrz:):
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Code Demo
W poniższym kodzie demonstracyjnym będziemy wyprowadzać to samo wystąpienie zarówno do XML, jak i do 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);
}
}
Wyjście
Poniżej jest wyjście z uruchomieniem kodu Demo:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<channels>
<channel>Test A</channel>
<channel>Test B</channel>
</channels>
</root>
{
"channels" : [ "Test A", "Test B" ]
}
Aby uzyskać więcej informacji
Czy wolałbyś raczej: '" kanały ": [" Test A "," Test B "]'? –