【发布时间】:2012-07-09 14:41:42
【问题描述】:
下面的 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,因为字段是employee而不是employees。
所以,我将 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 应该处理它是否足够重要?
【问题讨论】:
标签: java rest jaxb jax-rs resteasy