2016-11-10 2 views
0

Ich erzeuge ein Student-Objekt von einem JSON-Objekt, aber ein Problem ist, wenn ich dieses Objekt erstelle, möchte ich auch sein "studentClass" -Feld aktualisieren. Ich aktualisiere die Methode setStudentClass(), aber ich denke, GSON verwendet diese Setterfelder nicht. Wie kann ich eine Factory-Methode für die Methode fromJson() erstellen?Wie erstellt man eine Objekt Factory-Methode für die Gson-Methode?

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

} 
+0

zu POJO Nach der Konvertierung Sie den Wert des studentClass Attribut festlegen. Was wollten Sie danach erreichen? Sie haben die neuesten Werte im Student-Objekt. – notionquest

+0

Stellen Sie sicher, dass die Feldnamen in JSON-Zeichenfolge und POJO identisch sind. GSON ignoriert selbst kein Feld. und fügen Sie bitte die komplette Student-Klasse und wenn möglich auch JSON-String hinzu. –

+0

@notionquest Ich möchte updateClassInfo() -Methode nicht jedes Mal aufrufen, nachdem ich ein Schülerobjekt erstellt habe. Also dachte ich, ich kann eine Objekt-Factory-Methode erstellen und ich kann Studentenobjekte mit dieser Methode erstellen, aber Gson erstellt Objekte ein wenig anders, denke ich. – hellzone

Antwort

1

Diese Anforderung kann mit Custom Deserializer erfüllt werden. Beispielcode unten: -

Main-Methode: -

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()); 

    } 

Deserializer: -

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

} 

Ausgang: -

Student [name=John, studentClass=starter] 

Output, wenn Schüler Klasse nicht vorhanden ist: -

Student [name=John, studentClass=null] 
Verwandte Themen