Java&Xml教學(十一)JAXB實作XML與Java物件轉換
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换。
本文以一个简单的例子介绍JAXB的使用,首先我们需要了解一下JAXB常用的API。
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD),控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,将Java类或枚举类型映射到XML元素。
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
我们需要进行绑定的Java Bean内容如下:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
需要转换为Java对象的XML文件内容如下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下来编写测试用例代码:
TestJAXB.java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test;public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
运行testObj2Xml测试方法,控制台输出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
运行testXml2Obj测试方法,控制台输出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中使用JUnit4作为单元测试工具,在Eclipse中点击Window->Show View->OutLine菜单打开outline视图,分别在testXml2Obj和testObj2Xml方法上点击右键->Run As->JUnit Test即可。
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换。
本文以一个简单的例子介绍JAXB的使用,首先我们需要了解一下JAXB常用的API。
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD),控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,将Java类或枚举类型映射到XML元素。
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
我们需要进行绑定的Java Bean内容如下:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
需要转换为Java对象的XML文件内容如下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下来编写测试用例代码:
TestJAXB.java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test; public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
运行testObj2Xml测试方法,控制台输出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
运行testXml2Obj测试方法,控制台输出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中使用JUnit4作为单元测试工具,在Eclipse中点击Window->Show View->OutLine菜单打开outline视图,分别在testXml2Obj和testObj2Xml方法上点击右键->Run As->JUnit Test即可。
以上就是Java&Xml教程(十一)JAXB实现XML与Java对象转换的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Maven是Java項目管理和構建的標準工具,答案在於它通過pom.xml實現項目結構標準化、依賴管理、構建生命週期自動化和插件擴展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與衝突;4.通過多模塊項目結構組織大型應用並由父POM統一管理;5.配

要使用Java生成哈希值,可通過MessageDigest類實現。 1.獲取指定算法的實例,如MD5或SHA-256;2.調用.update()方法傳入待加密數據;3.調用.digest()方法獲取哈希字節數組;4.將字節數組轉換為十六進製字符串以便讀取;對於大文件等輸入,應分塊讀取並多次調用.update();推薦使用SHA-256而非MD5或SHA-1以確保安全性。

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

理解區塊鏈核心組件,包括區塊、哈希、鍊式結構、共識機制和不可篡改性;2.創建包含數據、時間戳、前一哈希和Nonce的Block類,並實現SHA-256哈希計算與工作量證明挖礦;3.構建Blockchain類管理區塊列表,初始化創世區塊,添加新區塊並驗證鏈的完整性;4.編寫主類測試區塊鏈,依次添加交易數據區塊並輸出鏈狀態;5.可選增強功能包括交易支持、P2P網絡、數字簽名、RESTAPI和數據持久化;6.可選用HyperledgerFabric、Web3J或Corda等Java區塊鏈庫進行生產級開

首先通過JavaScript獲取用戶系統偏好和本地存儲的主題設置,初始化頁面主題;1.HTML結構包含一個按鈕用於觸發主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點擊按鈕時切換html元素上的dark-mode類,並將當前狀態保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

在Java中將數組轉為列表需根據數據類型和需求選擇方法。 ①使用Arrays.asList()可快速將對像數組(如String[])轉為固定大小的List,但不可增刪元素;②若需可變列表,可通過ArrayList構造函數封裝Arrays.asList()的結果;③對於基本類型數組(如int[]),需用StreamAPI轉換,如Arrays.stream().boxed().collect(Collectors.toList());④注意事項包括避免傳null數組、區分基本類型與對像類型及明確返回列

@property裝飾器用於將方法轉為屬性,實現屬性的讀取、設置和刪除控制。 1.基本用法:通過@property定義只讀屬性,如area根據radius計算並直接訪問;2.進階用法:使用@name.setter和@name.deleter實現屬性的賦值驗證與刪除操作;3.實際應用:在setter中進行數據驗證,如BankAccount確保餘額非負;4.命名規範:內部變量用_前綴,property方法名與屬性一致,通過property統一訪問控制,提升代碼安全性和可維護性。

使用Flexbox或Grid可實現全屏佈局,核心是讓頁面最小高度為視口高度(min-height:100vh);2.通過flex:1或grid-template-rows:auto1frauto使內容區域佔滿剩餘空間;3.設置box-sizing:border-box確保內邊距不超出容器;4.配合響應式媒體查詢優化移動端體驗;該方案兼容性好且結構清晰,適用於登錄頁、儀錶盤等場景,最終實現內容垂直居中並佔滿視口的全屏頁面佈局。
