Company と Employee という 2 つの Java オブジェクトがあります。RESTful サービスを呼び出して HTTP GET できるように、どちらにも Jersey/JAXB アノテーションが付けられています。基本的に、Company は Employee の「親」オブジェクトであり、Company に対して GET を実行する場合、JSON 応答で Employees の子リストの属性のサブセットのみを提供したいと考えています。ただし、従業員自体に対して GET を実行するときに、従業員のすべての属性を返したいと考えています。
私はこれに頭を悩ませようとしてきましたが、それを行う方法がよくわかりません。かなり基本的なようですが、オンラインで例を見つけることができませんでした(間違ったものをグーグルで検索しているのかもしれません)。
会社.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...
}
これで、Company オブジェクトと Employee オブジェクトに対して HTTP GET を実行する RESTful サービスができました。
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 オブジェクトの下の Employees のリストが、Employee に対して指定された 2 つの属性 (つまり、従業員名と従業員 ID のみ) のみを返すようにします。したがって、私の望ましい JSON 応答は次のようになります。
{
"companyName": "Acme",
"companyType": "Services",
"employees": [
{
"employeeId": "123_ABC",
"employeeName": "John Doe"
},
{
"employeeId": "456_XYZ",
"employeeName": "Jane Doe"
}
]
}
ただし、もちろん、次のように、従業員リスト内のすべての従業員属性を返します。
{
"companyName": "Acme",
"companyType": "Services",
"employees": [
{
"employeeId": "123_ABC",
"employeeName": "John Doe",
"employeeType": "Engineer"
},
{
"employeeId": "456_XYZ",
"employeeName": "Jane Doe",
"employeeType": "Executive"
}
]
}
注釈だけでこれを行うことは可能ですか? または、独自の JSON オブジェクトを作成する以外に、これを行う他の方法はありますか?