2016-04-18 2 views
-1

Я вижу пустой ответ «{}», когда я запускаю ниже. Класс Employee имеет список, который, как я полагаю, вызывает проблему. пожалуйста, дайте мне знать, как я могу это преодолеть?GSON - преобразовать объект, который имеет общий список в строку JSON

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; 
    } 



} 

РЕДАКТИРОВАТЬ

Я понял, что приведенный ниже код вызывает проблему. В случае если объявить новый gson() и использовать объект gson, он работает, как ожидалось -

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

ответ

0

Проблема была вызвана к 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; 
    } 
} 

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; 
    } 



} 
Смежные вопросы