Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用gson反序列化时将默认值设置为变量_Java_Json_Gson - Fatal编程技术网

Java 使用gson反序列化时将默认值设置为变量

Java 使用gson反序列化时将默认值设置为变量,java,json,gson,Java,Json,Gson,我正在尝试转换为Java对象。当一对的某个值为null时,应使用一些默认值进行设置 这是我的: JSON对象示例: { "rollNo":"123", "name":"Tony", "school":null } 因此,如果school为null,我应该将其设置为默认值,例如“school”:“XXX”。在反序列化对象时,我如何配置它?我认为这样做的方法是编写无参数构造函数来填充默认值,或者使用创建者。然后,反序列化程序应替换正在反序列化的JSON对象中所有属性的默认值。如果JSON中存在

我正在尝试转换为Java对象。当一对的某个值为
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;
}