我已经看到了JAXB的许多实现,我们可以使用@XmlElement注释将java原语转换为XML元素.
但是,我想将以下POJO转换为XML(注意员工类中有一个地址对象,而不仅仅是原语):
public class Employee {
private Address address;
private int employeeId;
// constructors + setters + getters
}
Run Code Online (Sandbox Code Playgroud)
如何使用这些JAXB注释将员工对象编组为XML?
谢谢.
bdo*_*han 23
你需要做的就是编组一个POJO属性,而不是编组一个原始属性.引用的POJO类不需要注释@XmlRootElement.
雇员
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Employee {
private Address address;
private int employeeId;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
}
Run Code Online (Sandbox Code Playgroud)
地址
没有什么特别的事情可以让你Address作为一部分进行编组Employee.
public class Address {
private String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
Run Code Online (Sandbox Code Playgroud)
下面是一些演示代码,它将填充和员工模型并将其编组为XML.
演示
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Employee.class);
Address address = new Address();
address.setStreet("1 A Street");
Employee employee = new Employee();
employee.setEmployeeId(123);
employee.setAddress(address);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(employee, System.out);
}
}
Run Code Online (Sandbox Code Playgroud)
产量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<address>
<street>1 A Street</street>
</address>
<employeeId>123</employeeId>
</employee>
Run Code Online (Sandbox Code Playgroud)
如果要覆盖默认元素名称,则@XmlElement无论属性的类型如何,都可以使用注释.
雇员
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Employee {
private Address address;
private int employeeId;
@XmlElement(name="ADDR")
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@XmlElement(name="ID")
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
}
Run Code Online (Sandbox Code Playgroud)
产量
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<ADDR>
<street>1 A Street</street>
</ADDR>
<ID>123</ID>
</employee>
Run Code Online (Sandbox Code Playgroud)
我能够通过下面给出的方法使用 JAXB 实现“对象内对象”XML 编组(即通过使用@XmlRootElement注释对两个类进行注释):
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Employee {
@XmlElement
private Address address;
.
.
}
@XmlRootElement
public class Address {
.
.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42345 次 |
| 最近记录: |