Java&Xml Tutorial (11) 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 클래스의 모든 비정적(정적), 비일시적(@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; } }
변환해야 하는 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 메뉴를 사용하여 각각 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 클래스의 모든 비정적(정적), 비일시적(@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; } }
변환해야 하는 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 메뉴를 사용하여 각각 testXml2Obj 및 testObj2Xml 메소드에서 개요 보기를 엽니다. 마우스 오른쪽 버튼 클릭->Run As->JUnit Test.
위는 Java&Xml 튜토리얼입니다. (11) XML 및 Java 객체 변환의 JAXB 구현에 대한 자세한 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

JDBC 트랜잭션을 올바르게 처리하려면 먼저 자동 커밋 모드를 끄고 여러 작업을 수행 한 다음 결과에 따라 커밋 또는 롤백을 수행해야합니다. 1. 트랜잭션을 시작하려면 Conn.SetAutoCommit (False)에게 전화하십시오. 2. 인서트 및 업데이트와 같은 여러 SQL 작업을 실행합니다. 3. 모든 작업이 성공한 경우 Conn.commit ()에게 전화하여 데이터 일관성을 보장하기 위해 예외가 발생하면 Conn.Rollback ()에게 전화하십시오. 동시에, 재 시도는 리소스를 관리하고, 예외를 올바르게 처리하고, 연결 유출을 피하기 위해 긴밀한 연결을 사용하는 데 사용해야합니다. 또한 연결 풀을 사용하고 부분적으로 롤백을 달성하기 위해 저장 포인트를 설정하고 성능을 향상시키기 위해 거래를 가능한 한 짧게 유지하는 것이 좋습니다.

GO의 HTTP 로그 미들웨어는 요청 방법, 경로, 클라이언트 IP 및 시간 소모를 기록 할 수 있습니다. 1. http.handlerfunc를 사용하여 프로세서를 랩핑하고, 2. 다음에 전화하기 전후 시작 시간과 종료 시간을 기록하십시오. 전체 샘플 코드는 실행중인 것으로 확인되었으며 중소형 프로젝트를 시작하는 데 적합합니다. 확장 제안에는 상태 코드 캡처, JSON 로그 지원 및 요청 ID 추적이 포함됩니다.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

Java 's Garbage Collection (GC)은 메모리를 자동으로 관리하는 메커니즘으로, 도달 할 수없는 물체를 되 찾아서 메모리 누출의 위험을 줄입니다. 1.GC는 루트 객체 (예 : 스택 변수, 활성 스레드, 정적 필드 등)에서 객체의 접근성을 판단하며, 도달 할 수없는 객체는 쓰레기로 표시됩니다. 2. 마크 클리어링 알고리즘을 기반으로, 모든 도달 가능한 객체와 표시되지 않은 개체를 표시하십시오. 3. 세대 수집 전략 채택 : 새로운 세대 (Eden, S0, S1)는 종종 미성년자를 실행합니다. 노인은 성능이 적지 만 MajorGC를 수행하는 데 시간이 더 걸립니다. Metaspace는 클래스 메타 데이터를 저장합니다. 4. JVM은 다양한 GC 장치를 제공합니다. SerialGC는 소규모 응용 프로그램에 적합합니다. ParallelGC는 처리량을 향상시킵니다. CMS가 줄어 듭니다

올바른 htmlinput 유형을 선택하면 데이터 정확도를 향상시키고 사용자 경험을 향상 시키며 유용성을 향상시킬 수 있습니다. 1. 텍스트, 이메일, 전화, 번호 및 날짜와 같은 데이터 유형에 따라 해당 입력 유형을 선택하여 자동으로 체크섬 및 키보드에 적응할 수 있습니다. 2. HTML5를 사용하여보다 직관적 인 상호 작용 방법을 제공 할 수있는 URL, 색상, 범위 및 검색과 같은 새로운 유형을 추가하십시오. 3. 자리 표시 자 및 필요한 속성을 사용하여 양식 충전의 효율성과 정확성을 향상 시키지만 자리 표시자는 레이블을 대체 할 수 없다는 점에 유의해야합니다.

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

이 질문에 대한 명확한 대답은 사용자 정의 관찰자 인터페이스를 사용하여 관찰자 패턴을 구현하는 것이 권장되는 것입니다. 1. Java는 관찰 가능하고 관찰자를 제공하지만 전자는 계급이며 감가 상각되었으며 유연성이 부족합니다. 2. 최신 권장 관행은 기능 관찰자 인터페이스를 정의하는 것이며, 주제는 관찰자 목록을 유지하고 상태가 변경 될 때 모든 관찰자에게 알립니다. 3. 코드의 단순성과 유지 가능성을 향상시키기 위해 Lambda 표현과 함께 사용될 수 있습니다. 4. GUI 또는 Javabean 시나리오의 경우 PropertyChangelistener를 사용할 수 있습니다. 따라서 새로운 프로젝트는 유형-안전, 테스트하기 쉽고 현대 Java의 사용자 정의 관찰자 인터페이스 체계를 채택해야합니다.

OpenCSV 라이브러리 사용은 CSV 파일을 읽는 데 가장 적합한 선택입니다. 복잡한 상황을 처리 할 수 있으며 여러 기능을 지원합니다. 2. 간단한 CSV 파일의 경우 SPRING 메소드와 결합 된 Java의 내장 버퍼링 리더를 사용할 수 있습니다. 3. 더 유연한 형식 제어가 필요하거나 Apache 구성 요소를 사용한 경우 Apache Commonscsv를 선택할 수 있습니다. OpenCSV는 실제 시나리오에서 CSV 문제를 처리하는 단순성, 견고성 및 능력에 권장됩니다.
