简体   繁体   English

如何为gson方法创建对象工厂方法?

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

I am generating a Student object from a JSON object but problem is when I create this object I also want to update its "studentClass" field. 我正在从JSON对象生成一个Student对象,但是问题是当我创建该对象时,我也想更新其“ studentClass”字段。 I update setStudentClass() method but I think GSON doesn't use this setter fields. 我更新了setStudentClass()方法,但我认为GSON不使用此setter字段。 How can I create a factory method for fromJson() method? 如何为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
      .....
   }

}

This requirement can be fulfilled using custom deserializer. 使用自定义解串器可以满足此要求。 Sample code below:- 下面的示例代码:-

Main method:- 主要方法:-

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

}

Output:- 输出:-

Student [name=John, studentClass=starter]

Output if student class is not present:- 如果没有学生班级,则输出:

Student [name=John, studentClass=null]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM