我看到一个空洞的回答" {}"当我跑下面的时候。 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;
}
}
修改
我发现下面的代码导致了这个问题。如果if声明新的gson()并使用gson对象,则它按预期工作 -
this.setGson(new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeHierarchyAdapter(byte[].class,
new GsonByteArrayHandler())
.registerTypeHierarchyAdapter(boolean.class,
new GsonBooleanHandler())
.registerTypeHierarchyAdapter(Date.class,
new GsonDateHandler())
.create());
答案 0 :(得分:1)
引起问题的是excludeFieldsWithoutExposeAnnotation(),它排除了未注释为未序列化的所有字段。当我添加类似于下面列出的注释时,字段被序列化。
<强> EMPLOYEE 强>
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;
}
}
<强> GRADE 强>
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;
}
}