我有两个 Java 对象,Company 和 Employee。它们都使用 Jersey/JAXB 注释进行注释,因此我可以调用 RESTful 服务来 HTTP GET 它们。从本质上讲,Company 是 Employee 的“父”对象,如果为 Company 执行 GET,我想做的只是在 JSON 响应中为员工的子列表提供属性的子集。但是,在为 Employee 本身执行 GET 时,我仍然想返回 Employee 的所有属性。
我一直在努力解决这个问题,但我不太确定该怎么做。它看起来很基本,但我无法在网上找到任何示例(也许我在谷歌搜索错误的东西)。
公司.java
@XmlRootElement
public class Company {
private String companyName;
private String companyType;
private List<Employee> employees = new ArrayList<Employee>();
// getters and setters with @XmlElement on each attribute
//...etc...
@XmlElement
public List<Employee> getEmployees() {
return employees;
}
//...etc...
}
雇员.java
@XmlRootElement
public class Employee{
private String employeeId;
private String employeeName;
private String employeeType;
// getters and setters with @XmlElement on each attribute
//...etc...
@XmlElement
public String getEmployeeId() {
return employeeId;
}
//...etc...
}
现在,我有一个 RESTful 服务来对 Company 对象和 Employee 对象执行 HTTP GET:
public class infoService{
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getCompany(String Id) {
//....
}
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getEmployee(String Id) {
//....
}
}
为了获取 Employee 对象,所有属性都按预期返回。所以它看起来像这样:
{
"employeeId": "1A2-B35",
"employeeName": "John Doe",
"employeeType": "Engineer"
}
为 Company 对象执行 GET 时,我希望 Company 对象下的员工列表仅返回几个指定的 Employee 属性(即仅员工姓名和员工 ID)。因此,我想要的 JSON 响应看起来像这样:
{
"companyName": "Acme",
"companyType": "Services",
"employees": [
{
"employeeId": "123_ABC",
"employeeName": "John Doe"
},
{
"employeeId": "456_XYZ",
"employeeName": "Jane Doe"
}
]
}
但是,当然,它会返回员工列表中的所有 Employee 属性,如下所示:
{
"companyName": "Acme",
"companyType": "Services",
"employees": [
{
"employeeId": "123_ABC",
"employeeName": "John Doe",
"employeeType": "Engineer"
},
{
"employeeId": "456_XYZ",
"employeeName": "Jane Doe",
"employeeType": "Executive"
}
]
}
是否可以仅使用注释来做到这一点?或者有没有其他方法可以创建我自己的 JSON 对象?