Java 英语与JAX-B的语义/语法冲突
下面的DTO用于封装要在服务提供者和服务请求者之间传输的一组员工记录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)
@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”对类似于“公司”的东西进行建模,则这是必需的