空 JSON 与 null 转换为 a

Empty JSON vs null conversions to a

我正在尝试在 Java 中创建一个从前端接收 delta json 的 HTTP PUT 端点,但我在弄清楚如何实现 "nulls".

例如,如果我们有一个看起来像

的数据库模型
id : 1
firstname : Luke
lastname : Xu
age : 24
fav_color : Red

我们发送 PUT request to /person/1,json 为 {age : 25}。目前,我有一个 JOOQ pojo 可以将 JSON 转换为 java 模型,但问题是它也将我的数据库值更新为 null。

没有区别

{age : 25}

{id : 1,
firstname : null,
lastname : null,
age : 25,
fav_color : null}

一旦它达到我的 Java 终点,java 模型就将两种情况都设置为 "null" 并且传入 null 或未传递值之间没有区别完全没有。

我也考虑过处理一个输入流(类型 JSON),但问题是我们的 JSON 名称必须与数据库列名称完全相同,这也很好的不合理。

如果我们只想发一个"delta json",编辑数据库的标准是什么????

由于您使用的是 jOOQ,我建议您直接将 JSON 值传递给 jOOQ UpdatableRecord,这实际上可以区分:

  • null表示未初始化(或default
  • null 意思是 null

它通过为每个单独的列维护一个 changed() 标志来做到这一点。

例如:

{age : 25}

... 转换为此 Java 代码:

// record.set(USER.ID, 1) I suspect this is still necessary...?
record.set(USER.AGE, 25);
record.update();

...以及此 SQL 声明:

UPDATE users
SET age = 25
WHERE id = 1

{id : 1,
firstname : null,
lastname : null,
age : 25,
fav_color : null}

... 转换为此 Java 代码

record.set(USER.ID, 1);
record.set(USER.FIRSTNAME, null);
record.set(USER.LASTNAME, null);
record.set(USER.AGE, 25);
record.set(USER.FAV_COLOR, null);

...以及此 SQL 声明

UPDATE users
SET firstname = null,
    lastname = null,
    age = 25,
    fav_color = null
WHERE id = 1