json 如何通过Postman更新对象的ID

xe55xuns  于 2023-03-20  发布在  Postman
关注(0)|答案(1)|浏览(141)

我的数据库中有一些虚拟数据,其中一个“activity”示例只包含一个activityId作为其属性。Id是字符串,目前是手动设置的。这只是一个测试/虚拟项目。
我在我的spring Boot 项目中调用了一个@RestController,它有一个putmapping,可以保存更改后的对象。
我想更新一个现有的Activity,只需要更改它的ID,看看它是否工作。

@PutMapping("/activity/{id}")
    public ResponseEntity<Activity> updateActivity(@PathVariable String id, @RequestBody Activity activity) {
        Optional<Activity> activityOptional = activityRepo.findById(id);
        if (activityOptional.isPresent()) {
            activityRepo.save(activity);
            return new ResponseEntity<>(activity, HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }

在postman中,我做了一个put请求,调用url:本地主机:8080/活动/0001
因为我想更新id=0001的活动。我想将它更新为,比如说,0033。
在postman中,我输入了我希望它更改为的原始json格式:

{
    "activityId": "0033"
}

通过这样做,它不会更新Activity,而是使用新ID创建一个新Activity。
如何实际更新活动的ID?

ie3xauqp

ie3xauqp1#

JPA需要确定save是新的还是更新的,为此,默认情况下,它将使用看起来像您的ID的主键,这意味着更改ID将告诉JPA这是一个新条目。
最简单的方法可能是使用原生查询。在您的存储库中,使用类似以下的方法:

@Query(nativeQuery = true,
           value = "update activity set activityID = ?1 where activityId = ?2")
void updateActivityId(String newId, String oldId);

相关问题