[英]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.