Java REST放置ID为的资源,同时具有自动生成的ID
我正在实现一个RESTAPI,我想使用PUT方法来创建或更新资源。该资源由一个ID标识,该ID可由用户发送,如下所示:Java REST放置ID为的资源,同时具有自动生成的ID,java,spring-boot,hibernate,Java,Spring Boot,Hibernate,我正在实现一个RESTAPI,我想使用PUT方法来创建或更新资源。该资源由一个ID标识,该ID可由用户发送,如下所示: { "id": 5, "name": "John" } Spring引导Rest控制器接受消息并使用Spring数据存储库,该存储库具有自动生成的ID。如果数据库中存在具有此ID的记录,则将对其进行更新,否则将创建具有此ID的新记录。但是,ID是通过Hibernate序列创建的。如果用户添加了ID为5
{
"id": 5,
"name": "John"
}
Spring引导Rest控制器接受消息并使用Spring数据存储库,该存储库具有自动生成的ID。如果数据库中存在具有此ID的记录,则将对其进行更新,否则将创建具有此ID的新记录。但是,ID是通过Hibernate序列创建的。如果用户添加了ID为5的资源,但Hibernate序列在第2位,我应该移动Hibernate序列吗?或者有更好的方法来处理这个问题吗?在Hibernate中,如果您想添加具有自动生成ID的新实体,您不应该向它们传递ID列,或者如果您已经有ID为的实体,在Hibernate中,您应该将ID字段设置为null,如果您想添加具有自动生成ID的新实体,您不应该将其传递给ID列,或者如果您已经有具有ID的实体,您应该将ID字段设置为null,我相信没有,您应该分离POST/PUT API来创建/更新,就像
POST: /users
PUT: /users/{user_id}
body: {
"name": "John",
...
}
我相信不是,你应该分开POST/PUT API来创建/更新
POST: /users
PUT: /users/{user_id}
body: {
"name": "John",
...
}
我建议您创建一个查询方法GET:
GET: /users/{userId}
这有助于你获取身份证
注意。我建议您创建一个查询方法GET:
GET: /users/{userId}
这有助于你获取身份证
关于。当用户发送ID不存在的PUT消息时,应该发生什么?根据PUT规范,在这种情况下,应该创建一个新记录。如果您真的只想使用PUT,您可以做的是检查ID是否存在,如果不存在,请将ID设置为null,以便hibernate为您创建一个新ID。如果存在,请正常保存。但在某种程度上,我不知道为什么你会有一个还不存在的ID,这让我有点害怕。这告诉我你可能会有身份冲突。。。因此,您可以更新一个不需要更新的实体。您是对的,让用户决定ID是一个愚蠢的想法。我不知道我从哪个教程中得到的。当用户发送ID不存在的PUT消息时,会发生什么?根据PUT规范,在这种情况下,应该创建一个新记录。如果您真的只想使用PUT,您可以做的是检查ID是否存在,如果不存在,请将ID设置为null,以便hibernate为您创建一个新ID。如果存在,请正常保存。但在某种程度上,我不知道为什么你会有一个还不存在的ID,这让我有点害怕。这告诉我你可能会有身份冲突。。。所以你可以更新一个不需要更新的实体。你是对的,让用户决定ID是一个愚蠢的想法。我不知道我从哪个教程中得到的。如果找不到用户ID要更新的记录,PUT应该怎么做?在这种情况下,说用户不存在。一旦调用PUT:/users/123/{body}。这意味着您正试图为用户
123
更新某些内容,但用户不存在,然后返回user not valid/existingHow should behave,当它找不到用户id要更新的记录时?在这种情况下,所述用户不存在。一旦调用PUT:/users/123/{body}。这意味着您正试图为user123
更新某些内容,但user不存在,然后返回user not valid/existing