Sid*_*kha 9 java jaxb xjc getter-setter moxy
我有XSD文件形式的数据模型,然后从中xjc使用命令行生成相应的Java文件.
当我从XSD生成JAXB类时,List类型元素获取为它们生成的getter方法(没有相应的setter方法),如下所示:
public List<Type> getElement3() {
if (element3 == null) {
element3 = new ArrayList<Type>();
}
return this.element3;
}
Run Code Online (Sandbox Code Playgroud)
我在几乎所有从XSD List类型生成的文件中都有很多字段.
使用案例:
现在,我不希望通过null检查生成getter .我的应用程序代码具有逻辑,其中每个字段的getter经常被调用,这导致它们的初始化为空 List.
然后在编组时我必须停止空列表以传递有效负载,以避免通过线路发送大量空列表.
PS:我有一个用例明确Empty List设置的用例,服务器必须删除后端的某些项目.因此,区分值是由用户显式设置还是仅因为在访问字段期间调用了getter而设置的.List
那么,如何让JAXB生成一个没有null检查的getter ?
因为在编译之后编辑生成的java文件会很麻烦,因为它存在于很多文件中,我们有XSD版本需要更新,每次新版本出现时都必须执行编辑.
首先,我会考虑使用自定义 JAXB 绑定,但我无法\xc2\xb4t 想到任何可以满足此要求的方法。
\n\n在这种情况下,也许您可以使用包装类:
\n\nimport java.util.List;\n\nimport javax.xml.bind.annotation.XmlAccessType;\nimport javax.xml.bind.annotation.XmlAccessorType;\nimport javax.xml.bind.annotation.XmlElement;\nimport javax.xml.bind.annotation.XmlRootElement;\n\n@XmlRootElement(name = "employees")\n@XmlAccessorType (XmlAccessType.FIELD)\npublic class Employees\n{\n @XmlElement(name = "employee")\n private List<Employee> employees = null;\n\n public List<Employee> getEmployees() {\n return employees;\n }\n\n public void setEmployees(List<Employee> employees) {\n this.employees = employees;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后定义您的业务对象:
\n\n@XmlRootElement(name = "employee")\n@XmlAccessorType (XmlAccessType.FIELD)\npublic class Employee\n{\n private Integer id;\n private String firstName;\n private String lastName;\n private double income;\n\n //Getters and Setters\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在生成要编组的对象时,您必须自己控制列表的初始化:
\n\nEmployees employees = new Employees();\nemployees.setEmployees(new ArrayList<Employee>());\nRun Code Online (Sandbox Code Playgroud)\n\n这个例子的来源:这里
\n| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |