绑定到JSON和XML –处理集合
EclipseLink JAXB(MOXy)的優勢之一是能夠通過一組元數據將對象模型映射到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
領域模型
默認情況下, JAXB(JSR-222)實現不會在集合數據周圍輸出分組元素。 這可以通過使用@XmlElementWrapper批注來完成(請參閱:J AXB和Collection屬性
)。 該分組元素通常具有多個名稱,并且比@XmlElement批注定義的重復元素更適合JSON數組的鍵。
演示版
我們將使用一個真值指定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.doe@example.com');customer.getEmailAddresses().add('jdoe@example.org');Map<String, Object> properties = new HashMap<String, 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 version='1.0' encoding='UTF-8'?> <customer><name>Jane Doe</name><email-addresses><email-address>jane.doe@example.com</email-address><email-address>jdoe@example.org</email-address></email-addresses> </customer>JSON輸出
以下JSON輸出是從相同的元數據生成的。 唯一的區別是我們告訴MOXy使用分組元素作為JSON數組值的名稱。
{'customer' : {'name' : 'Jane Doe','email-addresses' : [ 'jane.doe@example.com', 'jdoe@example.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 Set<Class<?>> getClasses() {HashSet<Class<?>> set = new HashSet<Class<?>>(1);set.add(CustomerService.class);return set;}@Overridepublic Set<Object> getSingletons() {MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();moxyJsonProvider.setWrapperAsArrayName(true);HashSet<Object> set = new HashSet<Object>(1);set.add(moxyJsonProvider);return set;}}參考:在Java XML&JSON綁定博客上, JCG合作伙伴 Blaise Doughan的JSON和XML綁定處理 。
翻譯自: https://www.javacodegeeks.com/2013/03/binding-to-json-xml-handling-collections.html
總結
以上是生活随笔為你收集整理的绑定到JSON和XML –处理集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XP虚拟机下如何安装金蝶软件加密狗?(虚
- 下一篇: Java Code Geeks和Pack