У меня есть требование, при котором мне нужно исключить поля во время выполнения на основе их значения (когда значение пусто) для компонента ниже.
public class PromiseDateBean {
private String sellerCode;
private String enterpriseCode;
private Employee employee;
public String getSellerCode() {
return sellerCode;
}
public void setSellerCode(String sellerCode) {
this.sellerCode = sellerCode;
}
public String getEnterpriseCode() {
return enterpriseCode;
}
public void setEnterpriseCode(String enterpriseCode) {
this.enterpriseCode = enterpriseCode;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
public class Employee {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Для этого я создал собственный класс. Он исключает поля для PromiseDateBean, когда определенное значение пусто, но я застрял в случае, когда необходимо исключить любое поле Employee.
Обратите внимание, что значение может быть пустым для любого поля в PromiseDateBean или Employee.
public class PromiseDateBeanSerializer implements JsonSerializer<PromiseDateBean> {
@Override
public JsonElement serialize(PromiseDateBean promiseDateBean, Type type, JsonSerializationContext context) {
JsonObject jObj = (JsonObject)new GsonBuilder().create().toJsonTree(promiseDateBean);
if(promiseDateBean.getSellerCode().isEmpty()){
jObj.remove("sellerCode");
}else if(promiseDateBean.getEnterpriseCode().isEmpty()){
jObj.remove("enterpriseCode");
} else if(promiseDateBean.getEmployee().getAge() == 40) {
jObj.remove("employee.age");
// Tried this one as well
//jObj.remove("employee.age");
}
return jObj;
}
}