簡體   English   中英

如何為gson方法創建對象工廠方法?

[英]How to create an object factory method for gson method?

我正在從JSON對象生成一個Student對象,但是問題是當我創建該對象時,我也想更新其“ studentClass”字段。 我更新了setStudentClass()方法,但我認為GSON不使用此setter字段。 如何為fromJson()方法創建工廠方法?

Student student = gson.fromJson(studentJSON.toString(), Student.class);
student.updateClassInfo();


public class Student{

   private String name;
   private String studentClass;

   //getters and setters

   public void updateClassInfo(){

      if(studentClass.equals("1"))
        studentClass = "starter";
      else if
      .....
   }

}

使用自定義解串器可以滿足此要求。 下面的示例代碼:-

主要方法:-

public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\",\"studentClass\":\"1\"}";
        //String jsonString = "{\"name\":\"John\"}";

        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Student.class, new StudentModelDeserializer())
                .create();

        Student student = gson.fromJson(jsonString, Student.class);
        System.out.println(student.toString());

    }

解串器:

public class StudentModelDeserializer implements JsonDeserializer<Student> {

    @Override
    public Student deserialize(JsonElement paramJsonElement, Type paramType,
            JsonDeserializationContext paramJsonDeserializationContext) throws JsonParseException {

        String studentClass = null;
        if (paramJsonElement.getAsJsonObject().get("studentClass") != null) {
            studentClass = paramJsonElement.getAsJsonObject().get("studentClass").getAsString();
        }

        Student student = new Gson().fromJson(paramJsonElement.getAsJsonObject(), Student.class);

        if (studentClass != null) {
            if (studentClass.equals("1")) {
                student.setStudentClass("starter");
            }
        }

        return student;
    }

}

輸出:-

Student [name=John, studentClass=starter]

如果沒有學生班級,則輸出:

Student [name=John, studentClass=null]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM