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

我正在尝试将JSON转换为Java对象。 当一对的某个值为null ,应该使用某个默认值进行设置。

这是我的POJO :

 public class Student { String rollNo; String name; String contact; String school; public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } } 

示例JSON对象:

 { "rollNo":"123", "name":"Tony", "school":null } 

因此,如果学校为null ,我应该将其设为默认值,例如"school":"XXX" 。 在反序列化对象时如何使用Gson配置它?

如果null在JSON中,Gson将覆盖您可能在POJO中设置的任何默认值。 您可能会遇到创建自定义反序列化器的麻烦,但在这种情况下可能会有点过分。

我认为最简单的(并且可以说是最好的用例)事情就相当于Lazy Loading 。 例如:

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

注意:此解决方案的一个大问题是,要更改默认值,您必须更改代码。 如果您希望自定义默认值,则应使用上面链接的自定义反序列化器。

我认为这样做的方法是编写你的no-args构造函数来填充默认值,或者使用自定义实例创建器。 然后,反序列化器应替换要反序列化的JSON对象中所有属性的默认值。

您可以简单地创建一个检查null的通用函数

 model.SchoolName= stringNullChecker(model.SchoolName); public static String stringNullChecker(String val) { if (null == val) val = ""; return val; }