自己做的网站怎么让别人看见,建设一个网站论坛要多少钱,wordpress对联,湖北网站排名优化EclipseLink JAXB#xff08;MOXy#xff09;的优势之一是能够通过一组元数据将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折衷集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5#xff08;和EclipseLink 2.4.2#xff09;中得到解决#xff0… EclipseLink JAXBMOXy的优势之一是能够通过一组元数据将对象模型映射到JSON和XML。 一个弱点是您需要在JSON键或XML元素上折衷集合属性。 我很高兴地说这个问题已经在EclipseLink 2.5和EclipseLink 2.4.2中得到解决下面将通过一个示例进行演示。 您可以从2013年3月15日开始从晚上下载EclipseLink 2.5.0或EclipseLink 2.4.2每晚构建的版本以进行尝试。 http://www.eclipse.org/eclipselink/downloads/nightly.php 领域模型 默认情况下 JAXBJSR-222实现不会在集合数据周围输出分组元素。 这可以通过使用XmlElementWrapper批注来完成请参阅J AXB和Collection属性 。 该分组元素通常具有多个名称并且比XmlElement批注定义的重复元素更适合JSON数组的键。 package blog.json.collections;import java.util.*;
import javax.xml.bind.annotation.*;XmlRootElement
XmlType(propOrder{name, emailAddresses})
public class Customer {private String name;private ListString emailAddresses new ArrayListString();public String getName() {return name;}public void setName(String name) {this.name name;}XmlElementWrapper(nameemail-addresses)XmlElement(nameemail-address)public ListString getEmailAddresses() {return emailAddresses;}public void setEmailAddresses(ListltString emailAddresses) {this.emailAddresses emailAddresses;}}演示版 我们将使用一个真值指定JSON_WRAPPER_AS_ARRAY_NAME属性以告诉MOXy它应该使用分组元素作为JSON数组值的名称。 然后我们将使用相同的Marshaller将相同的对象输出到XML和JSON。 package blog.json.collections;import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;public class Demo {public static void main(String[] args) throws Exception {Customer customer new Customer();customer.setName(Jane Doe);customer.getEmailAddresses().add(jane.doeexample.com);customer.getEmailAddresses().add(jdoeexample.org);MapString, Object properties new HashMapString, Object(1);properties.put(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);JAXBContext jc JAXBContext.newInstance(new Class[] {Customer.class}, properties);Marshaller marshaller jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// Output XMLmarshaller.marshal(customer, System.out);// Output JSONmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, application/json);marshaller.marshal(customer, System.out);}}XML输出 以下是运行演示代码的XML输出。 我们看到电子邮件地址被编组为分组元素其中包含集合中每个项目的电子邮件地址元素。 ?xml version1.0 encodingUTF-8?
customernameJane Doe/nameemail-addressesemail-addressjane.doeexample.com/email-addressemail-addressjdoeexample.org/email-address/email-addresses
/customerJSON输出 以下JSON输出是从相同的元数据生成的。 唯一的区别是我们告诉MOXy使用分组元素作为JSON数组值的名称。 {customer : {name : Jane Doe,email-addresses : [ jane.doeexample.com, jdoeexample.org ]}
}JAX-RS 您可以在JAX-RS环境中轻松地将MOXy用作JSON绑定提供程序请参阅 MOXy作为您的JAX-RS JSON Provider – MOXyJsonProvider 。 您可以指定分组元素应作为与MOXyJsonProvider的wrapperAsArrayName属性的JSON数组名。 package blog.json.collections;import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;public class CustomerApplication extends Application {Overridepublic SetClass? getClasses() {HashSetClass? set new HashSetClass?(1);set.add(CustomerService.class);return set;}Overridepublic SetObject getSingletons() {MOXyJsonProvider moxyJsonProvider new MOXyJsonProvider();moxyJsonProvider.setWrapperAsArrayName(true);HashSetObject set new HashSetObject(1);set.add(moxyJsonProvider);return set;}} 参考在Java XMLJSON绑定博客上 JCG合作伙伴 Blaise Doughan的JSON和XML绑定处理 。 翻译自: https://www.javacodegeeks.com/2013/03/binding-to-json-xml-handling-collections.html