簡體   English   中英

Spring Data Rest PATCH 禁止更新特定字段

[英]Spring Data Rest PATCH forbid update on specific fields

我目前正在使用 spring-data-rest 開發一個小型 REST Web 服務:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

我遵循了以下指南: https : //spring.io/guides/gs/accessing-mongodb-data-rest/ ,它工作得很好。

我在我的 Person.class 上添加了一些注釋,以便在 POST 請求(如 @NonNull 等)期間驗證對象,如下所示:

public class Person {

    @Id
    private String id;

    @NonNull
    private String firstName;

    @NonNull
    private String lastName;

    private Integer age;

}

但現在我想做一個 PATCH 請求來更新我的對象(通過請求 curl -X PATCH http://localhost:8080/people/598c2a80d8425fae64161cc4 -d '{"age":23}')。

它也工作正常,但我想阻止某些字段的更新,例如,不應允許人們更新 firstName 和 lastName。

有什么方法可以通過注釋輕松完成嗎? 或者我是否必須對每個 PATCH(或 PUT)請求進行自定義驗證? 我不喜歡那個解決方案,因為我必須為我的模型的每個實體都這樣做。

我希望我清楚地暴露了我的問題,如果不清楚,請隨時問我更多問題。

感謝您的幫助。

你可以使用:

@Column(updatable = false)
@NonNull
private String firstName;

這不會拋出錯誤,但會避免該字段被更新。

您可以覆蓋特定的 PATCH 端點並僅保留允許的字段

@PatchMapping("/persons/{id}")
HttpEntity<?> patchPerson(@PathVariable("id") Person person,
                        @RequestBody final ObjectNode patch,
                        PersistentEntityResourceAssembler assembler) {
    List<String> allowedFields = List.of("age");
    ObjectNode validPatch = patch.retain(allowedFields);
    Person patchedPerson = jsonPatcher.merge(validPatch, person);

    Person entity = personRepository.save(patchedPerson);
    PersistentEntityResource resource = assembler.toFullResource(entity);
    return ResponseEntity.accepted().body(resource);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM