【问题标题】:GSON - Convert Object that has a Generic List in to JSON StringGSON - 将具有通用列表的对象转换为 JSON 字符串
【发布时间】:2016-04-18 20:02:13
【问题描述】:

当我运行以下命令时,我看到一个空响应“{}”。 Employee 类有一个列表,我认为这是导致问题的原因。请问您能告诉我如何克服这个问题吗?

public class ServiceValidationTest {

private Gson gson;

public ServiceValidationTest() {
    this.setGson(new GsonBuilder()
            .excludeFieldsWithoutExposeAnnotation()
            .registerTypeHierarchyAdapter(byte[].class,
                    new GsonByteArrayHandler())
            .registerTypeHierarchyAdapter(boolean.class,
                    new GsonBooleanHandler())
            .registerTypeHierarchyAdapter(Date.class,
                    new GsonDateHandler())
            .create());
}

public static void main(String[] args) throws Exception{

    List<Grade> grades = new ArrayList<Grade>();
    grades.add(new Grade("1"));
    grades.add(new Grade("2"));
    grades.add(new Grade("3"));
    grades.add(new Grade("4"));

    Employee employee = new Employee();
    employee.setGrades(grades);
    employee.setName("someone");

    System.out.println(new ServiceValidationTest().getGson().toJson(employee));

}

public Gson getGson() {
    return gson;
}

public void setGson(Gson gson) {
    this.gson = gson;
}

}

员工类

package com.test;

import java.util.List;

public class Employee {

    private String name;
    private List<Grade> grades;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Grade> getGrades() {
        return grades;
    }
    public void setGrades(List<Grade> grades) {
        this.grades = grades;
    }
}

等级

package com.test;

public class Grade {



    public Grade(String grade) {
        super();
        this.grade = grade;
    }

    private String grade;

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }



}

编辑

我发现下面的代码导致了这个问题。如果如果声明 new gson() 并使用 gson 对象,则它按预期工作 -

        this.setGson(new GsonBuilder()
            .excludeFieldsWithoutExposeAnnotation()
            .registerTypeHierarchyAdapter(byte[].class,
                    new GsonByteArrayHandler())
            .registerTypeHierarchyAdapter(boolean.class,
                    new GsonBooleanHandler())
            .registerTypeHierarchyAdapter(Date.class,
                    new GsonDateHandler())
            .create());

【问题讨论】:

    标签: java json spring gson


    【解决方案1】:

    问题是由 excludeFieldsWithoutExposeAnnotation() 引起的,它排除了所有未注释为未序列化的字段。当我添加类似于下面列出的注释时,这些字段被序列化了。

    员工

    package com.test;
    
    import java.util.List;
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Employee {
    
        @Expose @SerializedName("NAME") 
        private String name;
        @Expose @SerializedName("GRADES") 
        private List<Grade> grades;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public List<Grade> getGrades() {
            return grades;
        }
        public void setGrades(List<Grade> grades) {
            this.grades = grades;
        }
    }
    

    等级

    package com.test;
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Grade {
    
    
    
        public Grade(String grade) {
            super();
            this.grade = grade;
        }
    
        @Expose @SerializedName("GRADE") 
        private String grade;
    
        public String getGrade() {
            return grade;
        }
    
        public void setGrade(String grade) {
            this.grade = grade;
        }
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 2018-05-29
      • 2021-10-04
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      相关资源
      最近更新 更多