Java 使用gson反序列化时将默认值设置为变量
我正在尝试转换为Java对象。当一对的某个值为Java 使用gson反序列化时将默认值设置为变量,java,json,gson,Java,Json,Gson,我正在尝试转换为Java对象。当一对的某个值为null时,应使用一些默认值进行设置 这是我的: JSON对象示例: { "rollNo":"123", "name":"Tony", "school":null } 因此,如果school为null,我应该将其设置为默认值,例如“school”:“XXX”。在反序列化对象时,我如何配置它?我认为这样做的方法是编写无参数构造函数来填充默认值,或者使用创建者。然后,反序列化程序应替换正在反序列化的JSON对象中所有属性的默认值。如果JSON中存在
null
时,应使用一些默认值进行设置
这是我的:
JSON对象示例:
{
"rollNo":"123", "name":"Tony", "school":null
}
因此,如果school为
null
,我应该将其设置为默认值,例如“school”:“XXX”
。在反序列化对象时,我如何配置它?我认为这样做的方法是编写无参数构造函数来填充默认值,或者使用创建者。然后,反序列化程序应替换正在反序列化的JSON对象中所有属性的默认值。如果JSON中存在null
,Gson将覆盖您可能在POJO中设置的任何默认值。您可能会不辞辛劳地创建一个,但在这种情况下,这可能是矫枉过正
我认为最简单的(并且,考虑到您的用例,可以说是最好的)事情是等效于。例如:
private static final String DEFAULT_SCHOOL = "ABC Elementary";
public String getSchool() {
if (school == null) school == DEFAULT_SCHOOL;
return school;
}
public void setSchool(String school) {
if (school == null) this.school = DEFAULT_SCHOOL;
else this.school = school;
}
注意:此解决方案的一个大问题是,为了更改默认值,您必须更改代码。如果希望自定义默认值,则应使用上面链接的自定义反序列化程序。您只需创建一个检查null的通用函数即可
model.SchoolName= stringNullChecker(model.SchoolName);
public static String stringNullChecker(String val) {
if (null == val) val = "";
return val;
}
您可以将默认值作为静态变量,并在多个位置使用它们。因此,当您需要更改任何默认值时,只需更改最终静态的值..太好了,很聪明way@durron是否可能考虑到gson不使用setter/getter访问和设置字段属性?
model.SchoolName= stringNullChecker(model.SchoolName);
public static String stringNullChecker(String val) {
if (null == val) val = "";
return val;
}