Исключить поля в POJO во время выполнения с помощью GSON - PullRequest
0 голосов
/ 03 марта 2020

У меня есть требование, при котором мне нужно исключить поля во время выполнения на основе их значения (когда значение пусто) для компонента ниже.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...