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

2024-02-28

我正在尝试转换JSON http://www.json.org/到 Java 对象。当一对的某个值是null,应该设置一些默认值。

这是我的POJO https://en.wikipedia.org/wiki/Plain_Old_Java_Object:

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 https://github.com/google/gson反序列化对象时?


If the null在 JSON 中,Gson 将覆盖您在 POJO 中设置的任何默认值。你could不厌其烦地创建一个定制解串器 https://google.github.io/gson/apidocs/com/google/gson/TypeAdapter.html,但在这种情况下这可能有点过分了。

我认为最简单的(并且可以说是最好的考虑到你的用例)要做的事情相当于延迟加载 https://en.wikipedia.org/wiki/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;
}

Note:该解决方案的一个大问题是,为了更改默认值,您必须更改代码。如果您希望可以自定义默认值,则应该使用上面链接的自定义解串器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gson 反序列化时将默认值设置为变量 的相关文章

随机推荐

  • 如何避免单个像素线在wpf中消失?

    我使用路径element StrokeThickness 1 SnapsToDevicePixels True 在网格中 我想调整窗口大小 Grid 元素被 Viewbox 元素包裹 Problem 当我调整窗口大小时 路径有时会消失 如果
  • 使用导航组件时从子级获取父级片段

    我需要将数据从一个片段传输到另一个片段 现在推荐的方法是使用共享ViewModel 为了在两个片段中获得相同的实例 需要共同的所有者 因为这可能是他们的共同点Activity 但通过这种方法 在单一活动的情况下 ViewModel实例将存在
  • 跨浏览器自定义复选框

    I have HTML and CSS我用来构建自定义复选框的代码 我相信我的代码具有正确的网络工具包 但它似乎不适用于 FireFox 这是代码 HTML
  • Delphi 带有 HTML/CSS 界面

    我想开发一个带有 HTML CSS 图形用户界面的 delphi 应用程序 不一定在 Web 浏览器中运行 我想这样做 创建一个更丰富的带有动画等的图形用户界面 并摆脱正常的 VCL 组件 Windows 外观 有什么建议么 HTML 和
  • 指针数组的大小

    我对 sizeof 运算符有疑问 Code 1 int main int p 10 printf d sizeof p output 40 return 0 Code 2 int main int p 10 printf d sizeof
  • 在 APK 文件中嵌入登录详细信息,每个用户都不同(或其他选项?)

    我们被要求为一家拥有现有网站和现有用户的公司创建一个 Android 瘦 Web 客户端 他们想要向用户发送彩信 为每个用户提供自己的下载 URL 该 URL 将指向专门为该用户创建的 Android apk 文件 它将包含该用户的网站登录
  • jQuery DataTables:控制表宽度

    我在使用 jQuery DataTables 插件控制表格宽度时遇到问题 该表应该是容器宽度的 100 但最终是任意宽度 而不是小于容器宽度 感谢建议 表声明看起来像这样 table class display cellspacing 0
  • 使用 texelFetch() 进行纹理化

    当我将非最大值传递到纹理缓冲区时 在渲染时它会绘制具有最大值颜色的几何图形 我在使用 glTexBuffer API 时发现了这个问题 例如 假设我的纹理数据是GLubyte 当我传递任何小于255的值时 那么颜色与用255绘制的颜色相同
  • 只更新更改的字段还是全部字段?

    我想知道在更新记录以检索现有记录 循环遍历字段检查更改并仅将更改的字段放入更新查询中是否值得花费服务器时间 我正在使用 MySQL 和 PHP 这样做的主要原因是为了减少更改日志的更新查询的大小 通常查询可能有 15 个字段 但实际上只有
  • Heroku - '@heroku/buildpack-registry 无法从 @heroku-cli/plugin-buildpacks 访问'

    我尝试通过 Heroku 启动我的 Nuxt SSR Universal 应用程序 因为 Netlify 不再满足我的需求 我需要后端功能 按照教程进行操作here https nuxtjs org faq heroku deploymen
  • 创建任务板模板

    基本想法是 我希望能够制作一个新的承包商任务板主模板 我将有一个称为承包商集成的迭代路径 里面有一个主模板 其中有 4 个故事 每个故事有 10 个任务 我希望能够通过更改分配给它的名称来为每个新来的人使用此模板 因此 每次我招募新人时 都
  • 组件属性不支持复杂内容(混合 C# 和标记)

    我正在尝试使用 Razor 参数并将其传递到 Blazor 中进行进一步处理 但在我尝试构建的 onclick 事件上收到此错误消息 组件属性不支持复杂内容 混合 C 和标记 img 标签如下 tr for int j 0 j lt Can
  • 宝石安装 ffi -v '1.1.5' osx 10.8

    我一直在尝试通过以下方式在 OSX 10 8 上安装 ffi gem install ffi v 1 1 5 结果 ERROR Error installing ffi ERROR Failed to build gem native ex
  • Pytest 不选取类内的测试方法

    一直使用Pythonunittest2 并且刚刚开始迁移到pytest 当然 我试图进行比较 但我无法弄清楚的一件事是 Question为什么 Pytest 不选择 测试 类中定义的测试方法 什么对我有用 login test py imp
  • 可以更少地引用扩展属性吗?

    是否有可能以更少的时间扩展扩展财产 我在一个 分布式 文件中有定义 需要添加 important在我的特殊情况下 现有财产 例如 我有一个定义此类的 less 文件 pfx grey light bg background color e5
  • 从命令行将文件包含在项目中

    有没有办法在 vs2012 中从命令行将文件包含在项目中 我之所以问这个问题 是因为每当我使用其他 IDE 如 ST3 或从 Photoshop 等保存文件时 将添加到项目文件夹中的任何新文件包含在内是非常令人沮丧的 我正在使用 Grunt
  • Android:暂停/恢复计时器或线程

    我已经检查了有关如何暂停 恢复计时器的所有答案 但找不到解决方案 我创建了一个计时器任务 它计算员工的工作时间并将其放入 TextView 中进行显示 代码如下 Timer T new Timer T scheduleAtFixedRate
  • 如何获取 solr 术语频率?

    我有一个问题 如何才能像我们通过以下方法在 lucene 中获得术语频率一样 DocFreq new Term 字段 值 使用 solr solrnet Try 调试查询 打开 http wiki apache org solr SolrR
  • 如何在没有“onLocationChange”方法的情况下知道 GPS 位置

    我想通过单击一个按钮来发送短信 并且在短信中我想发送位置信息 我试过 location locationManager getLastKnownLocation LocationManager NETWORK PROVIDER 但第一次显示
  • 使用 gson 反序列化时将默认值设置为变量

    我正在尝试转换JSON http www json org 到 Java 对象 当一对的某个值是null 应该设置一些默认值 这是我的POJO https en wikipedia org wiki Plain Old Java Objec