我正在使用Spring和Postgres编写一个web api。
我有一个案例,我带了一个Json对象item
uri是/api/item/{itemId}
请求类型为PUT
{
"name":"itemname",
"description":"item description here"
}
所以我(使用JdbcTemplate)使用SELECT
语句来检查itemId
是否存在,然后更新它是否存在。
我还想实现一个使用Json的部分put的情况,看起来像这样::
{
"name":"itemname"
}
OR
{
"description":"item description here"
}
其中仅更新相应的字段。在Spring中,不存在的变量自动为null
。
现在实施的方式是:
SELECT
items
表UPDATE
所有包含值的列(如果表格有null
约束,则不应为not null
问题:如果没有== null or != null
检查,你怎么做?似乎是糟糕的设计,并涉及迭代每个PUT
请求的每个预期变量(我会有很多这样的请求)。
期望的回应(按照可取的顺序):
null
值,则不会将列值写入数据库(并且不会产生错误)答案 0 :(得分:0)
使用数据库时有两种选择:
让我们看看第1号:
假设您现在正在查看已发送回服务器的html form
的内容。获取html表单中的每个字段,并使用SQL语句仅更新数据库中的那些字段。表单中没有的任何内容都不会在数据库表中更新。简单!效果很好。您不必担心表单中没有的任何内容。您可以将更新限制为表单的内容。
一般来说,这是一个简单的选项,除了一个问题,即 html复选框。如果你正在进行更新,html复选框可能会让你失望,因为由于一点设计怪癖,如果取消选中它们,它们就不会被发送回服务器。
没有。 2:也许你正在寻找你没有提到的Hibernate。杰克逊将为你填写一个json对象(必须有一个记录ID)。使用Hibernate用现有记录填充java类,使用Jackson提供的新值进行更新,然后告诉Hibernate将它合并()到数据库中的现有记录中。我也使用Roo为我创建我的Hibernate-ready类。
没有。 2很难学习和设置,但是一旦你完成了它,它就很容易改变,添加字段等等。