以下 DTO 用于封装要在服务提供者和服务请求者之间传输的一堆 Employee 记录。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement (name="employees")
public class EmployeeList {
private List<Employee> employee;
public List<Employee> getEmployee() {
if (employee==null)
employee = new ArrayList<Employee>();
return employee;
}
public void setEmployee(List<Employee> employee) {
this.employee = employee;
}
}
上述 DTO 声明将生成以下 XML
<employees>
<employee id="1234" ...... />
<employee id="1236" ...... />
....
</employees>
当我希望获得员工名单时,问题就出现了。
public void showEmployees(EmployeeList employeeList) {
List<Employee> employees = employeeList.getEmployee();
dothedo(employees);
}
请注意,该函数不是 getEmployees 而是 getEmployee,因为该字段是雇员而不是雇员。
因此,我将 DTO 更改为:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement (name="employees")
public class EmployeeList {
private List<Employee> employees;
public List<Employee> getEmployees() {
if (employee==null)
employee = new ArrayList<Employee>();
return employee;
}
public void setEmployee(List<Employee> employee) {
this.employee = employee;
}
}
所以我现在会得到员工
List<Employee> employees = employeeList.getEmployees();
将复数放入 DTO 的问题是会导致遵循 XML,这是不可接受的。我什至不认为 RestEasy 运行时不会因为根元素和子元素之间的命名冲突而发声。
<employees>
<employees id="1234" ...... />
<employees id="1236" ...... />
....
</employees>
那么,您的建议是什么,以使 DTO 在英语中直观(多个项目带有复数名称),并且 XML 输出也很直观(单数项目应该具有单数标签名称)。
有没有办法重新设计我的列表 DTO 来避免这种语义冲突?如果不是,您认为下一个版本的 jax-b 应该处理它是否足够重要?