這個需求可以通過使用自定義解串器來實現。下面的示例代碼: -
主要方法: -
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]
轉換成POJO之後,您可以設置studentClass屬性的值。之後,你想實現什麼?您在Student對象中具有最新值。 – notionquest
請確保JSON字符串和POJO中的字段名稱完全相同。 GSON本身並不會忽視任何領域。並且請添加完整的Student類以及可能的JSON字符串。 –
@notionquest我不想每次創建學生對象後調用updateClassInfo()方法。所以我認爲我可以創建一個對象工廠方法,並且可以使用此方法創建學生對象,但是gson創建的對象與我的想法稍有不同。 – hellzone