【问题标题】:Patch REST API to Partial Update MongoDB in spring boot在 Spring Boot 中修补 REST API 以部分更新 MongoDB
【发布时间】:2020-09-07 11:01:21
【问题描述】:

我想向我的 API 发送一个 REST PATCH 请求以仅更新某些字段而不是整个请求正文。谁能帮我解决这个问题

@PatchMapping("/update/{id}")
    public ResponseEntity<String> update(@Valid @RequestBody Ordonnance ordonnance, @PathVariable("id") String id){

        Optional<Ordonnance> ordonnanceData = ordonnanceRepository.findById(id);
       this.ordonnanceRepository.save(ordonnance);
       return ResponseEntity.ok("resource updated");
}

【问题讨论】:

    标签: java mongodb spring-boot api rest


    【解决方案1】:

    您可以通过对从存储库返回的对象调用 setter 来修改字段。

    @PatchMapping("/update/{id}")
    public ResponseEntity<String> update(@Valid @RequestBody Ordonnance ordonnance, @PathVariable("id") String id){
        Optional<Ordonnance> dbOrdonnance = ordonnanceRepository.findById(id);
    
        if (!ordonnanceData.isPresent()) {
          // The ID entered could not be found.
          return ResponseEntity.notFound("Resource with id " + id + " was not found");
        }
    
        // Modify the values of the Ordonnance object retrieved from the database
        Ordonnance ordonnanceToEdit = dbOrdonnance.get();
        ordonnanceToEdit.setField1(ordonnance.getField1());
        ordonnanceToEdit.setField2(ordonnance.getField2());
        ordonnanceToEdit.setField3(ordonnance.getField3());
    
        // Save to repository
        this.ordonnanceRepository.save(ordonnanceToEdit);
        return ResponseEntity.ok("Resource with ID " + id + " was successfully updated.");
    }
    

    此代码应该可以工作,但是您应该创建单独的Java DTO Classes,它们通常用于传输数据。这样您就可以只传入 ID 和要更新的字段,而不必传入整个对象。

    【讨论】:

    • 我在 if(ordonnance.getField1()!=null) 之前这样做了,然后我设置了字段 ordonnanceToEdit.setField1(ordonnance.getField1());因为如果我在更新其中一些字段时删除其他字段是否为空,我不知道它是否是明智的代码
    • 这个很好,但是只有在要编辑现有字段时才有效,我们不能用这种方法添加新字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2021-07-27
    • 2014-10-27
    • 1970-01-01
    • 2019-01-12
    • 2017-11-23
    相关资源
    最近更新 更多