Примечание: Я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222) экспертная группа.
EclipseLink JAXB (MOXy) обеспечивает встроенную поддержку JSON-привязки.Он правильно упорядочит коллекции размера 1, обернутые в массив JSON.Ниже приведен полный пример.
Компания
package forum3946102;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {
private int id;
private String name;
private String description;
@XmlElement(name = "industries")
private List<Industry> industryList;
}
Промышленность
package forum3946102;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Industry {
private int id;
private String name;
}
jaxb.properties
Чтобы указать MOXy в качестве поставщика JAXB, вам необходимо добавить файл с именем jaxb.properties
в тот же пакет, что и классы вашего домена, со следующей записью:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Демонстрация
package forum3946102;
import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Company.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
unmarshaller.setProperty("eclipselink.json.include-root", false);
String jsonString = "{\"id\":\"0\",\"industries\":[{\"id\":\"0\",\"name\":\"Technologies\"}],\"name\":\"Google Inc.\"}";
StreamSource jsonSource = new StreamSource(new StringReader(jsonString));
Company company = unmarshaller.unmarshal(jsonSource, Company.class).getValue();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty("eclipselink.media-type", "application/json");
marshaller.setProperty("eclipselink.json.include-root", false);
marshaller.marshal(company, System.out);
}
}
Вывод
Ниже представлен вывод из демонстрационного кода:
{"id" : 0, "name" : "Google Inc.", "industries" : [{"id" : 0, "name" : "Technologies"}]}
Для получения дополнительной информации