清空JSON与空转换为

时间:2016-05-11 21:28:49

标签: java json jersey put jooq

我试图在Java中创建一个HTTP PUT端点,从前端接收delta json,我在确定如何实现" nulls&#时遇到了一些麻烦34。

例如,如果我们有一个类似于

的数据库模型
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" ????

,那么编辑数据库的标准是什么?

1 个答案:

答案 0 :(得分:1)

由于您正在使用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