Java 英语与JAX-B的语义/语法冲突

Java 英语与JAX-B的语义/语法冲突,java,rest,jaxb,jax-rs,resteasy,Java,Rest,Jaxb,Jax Rs,Resteasy,下面的DTO用于封装要在服务提供者和服务请求者之间传输的一组员工记录 @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement (name="employees") public class EmployeeList { private List<Employee> employee; public List<Employee> getEmployee() { if (employee==null)

下面的DTO用于封装要在服务提供者和服务请求者之间传输的一组员工记录

@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;
  }
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“employees”)
公共类雇员名单{
私人名单雇员;
公共列表getEmployee(){
if(employee==null)
employee=newarraylist();
返回员工;
}
公共员工(列出员工){
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);
}
public void showEmployees(员工列表员工列表){
List employeeList.getEmployee();
dothedo(雇员);
}
请注意,函数不是getEmployees,而是getEmployees,因为该字段是employee而不是employees

public void showEmployees(EmployeeList employeeList) {
    List<Employee> employees = employeeList.getEmployee();
    dothedo(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;
  }
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“employees”)
公共类雇员名单{
私人名单雇员;
公开名单{
if(employee==null)
employee=newarraylist();
返回员工;
}
公共员工(列出员工){
this.employee=employee;
}
}
这样我现在就可以找到员工了

List<Employee> employees = employeeList.getEmployees();
List employeeList=employeeList.getEmployees();
将复数形式放入DTO的麻烦在于,会产生以下XML,这是不可接受的。我甚至不认为RestEasy运行时不会因为根元素和子元素之间的命名冲突而发出嘎嘎声

<employees>
  <employees id="1234" ...... />
  <employees id="1236" ...... />
  ....
</employees>

....
那么,为了使DTO在英语中具有直观性(多个项目具有复数名称),并且XML输出也具有直观性(单数项目应具有单数标记名称),您的建议是什么


有没有办法重新构建列表DTO以避免这种语义冲突?如果没有,您认为下一版本的jax-b应该处理这个问题是否足够重要?

您只需要在employees属性上使用@xmlement(name=“employee”)

另请参见@XmlElementWrapper——在本例中不需要(因为您的类是“employees”包装器),但如果您正在用“employees”对类似于“公司”的东西进行建模,则这是必需的