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

我正在尝试转换 JSON到 Java 对象。当pair的某个值为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 中设置的任何默认值。您可以费力地创建 custom deserializer ,但在这种情况下可能有点过头了。

我认为最简单的(并且,根据您的用例,可以说是最好的)相当于 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;
}

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

https://stackoverflow.com/questions/30216317/

相关文章:

java - Spring 3.0 使用 jackson 消息转换器做出 JSON 响应

.net - 为什么 ServiceStack.Text 不默认日期为 iso8601?

c# - 如何返回 JSON 对象

android - 如何从 JSONObject 中删除 nameValuePairs 键?

python - 如何在scrapy中实现嵌套项?

json - 如何在 Play Framework 2.x 中实现嵌入式对象的隐式 Json 写入

json - 在 oracle 12c 中以 JSON 形式返回 sql 查询的结果

json - 如何在 spark sql 中解析嵌套的 JSON 对象?

java - 序列化对象时如何让 jackson 忽略 get() 方法

json - 确保数组中的项目属性在 Json Schema 中是唯一的?