我试图在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" ????
,那么编辑数据库的标准是什么?答案 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