java - 空 JSON 与 null 转换为

标签 java json jersey put jooq

我正在尝试在 Java 中创建一个从前端接收 delta json 的 HTTP PUT 端点,但我在弄清楚如何实现“空值”时遇到了一些麻烦。

例如,如果我们有一个看起来像这样的数据库模型

id : 1
firstname : Luke
lastname : Xu
age : 24
fav_color : Red

然后我们将 PUT 请求发送到/person/1,其中包含 {age : 25} 的 json。目前,我有一个 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 表示未初始化(或默认)
  • 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 - 空 JSON 与 null 转换为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37173591/

相关文章:

python - 如何从交易行中有效地构建亲和性矩阵?

php - 如何使用 php 将我的 sql 查询转换为 json?

java - Jersey :复合资源

java - 为什么 apache-commons lib 编码空间为 + 而不是 %20?

java - 即使我有 JAVA 8 也无法安装 Jenkins

java - 随机与随机播放

java - 如何一致地处理 jersey 和 tomcat 错误?

java - 致命异常 : Main java. lang.RuntimeException:

java - 如何防止API链接被捕获?

java - JAX-RS POST bean 属性的默认值