gpt4 book ai didi

java - 英语和 JAX-B 之间的语义/语法冲突

转载 作者:行者123 更新时间:2023-12-01 15:17:45 25 4
gpt4 key购买 nike

以下 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;
}
}

这样我现在就可以得到Employees

List<Employee> employees = employeeList.getEmployees();

将复数放入 DTO 的麻烦在于会产生以下 XML,这是 Not Acceptable 。我什至不认为 RestEasy 运行时不会因为根元素和子元素之间的命名冲突而崩溃。

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

那么,为了让 DTO 在英语中直观(多个项目带有复数名称),并且 XML 输出也直观(单个项目应该有单个标签名称),您的建议是什么。

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

最佳答案

您只需在您的员工属性上使用 @XmlElement(name = "employee") 即可。

另请参阅 @XmlElementWrapper - 在本例中不是必需的(因为您的类是“员工”包装器),但如果您使用“员工”对“公司”之类的内容进行建模,则有必要。

关于java - 英语和 JAX-B 之间的语义/语法冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com