空 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
我正在尝试在 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