我有 XSD 文件形式的数据模型,然后使用命令行从 xjc
生成相应的 Java 文件。
当我从 XSD 生成 JAXB 类时,List
类型元素获取为它们生成的 getter 方法(没有相应的 setter 方法),如下所示:
public List<Type> getElement3() {
if (element3 == null) {
element3 = new ArrayList<Type>();
}
return this.element3;
}
几乎每个从 List
类型的 XSD 生成的文件中都有很多字段。
用例:
现在,我不希望通过 null
检查生成 getter。我的应用程序代码具有经常调用每个字段的 getter 的逻辑,这导致它们初始化为 empty List
。
然后在编码时我必须停止空列表以传递有效负载以避免通过网络发送大量空列表。
PS:我有一个用例,其中 Empty List
由用户明确设置,服务器必须在后端删除某些项目。因此,区分该值是由用户显式设置还是仅仅因为 List
的 getter 在访问该字段 期间被调用而设置。
那么,如何让 JAXB 生成一个没有 null
检查的 getter ??
因为,在编译后编辑生成的 java 文件会很麻烦,因为它存在于很多文件中,而且我们的 XSD 版本正在更新,每次出现新版本时都必须执行编辑。
最佳答案
起初,我会考虑使用自定义 JAXB 绑定(bind),但我想不出任何可以满足此要求的方法。
在这种情况下,也许您可以使用包装器类:
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "employees")
@XmlAccessorType (XmlAccessType.FIELD)
public class Employees
{
@XmlElement(name = "employee")
private List<Employee> employees = null;
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
然后定义你的业务对象:
@XmlRootElement(name = "employee")
@XmlAccessorType (XmlAccessType.FIELD)
public class Employee
{
private Integer id;
private String firstName;
private String lastName;
private double income;
//Getters and Setters
}
在生成要编码的对象时,您必须自己控制列表的初始化:
Employees employees = new Employees();
employees.setEmployees(new ArrayList<Employee>());
此示例的来源:Here
关于java - JAXB 编辑列表 setter/getter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304471/