![](/img/trans.png)
[英]Spring Data Rest - How to prevent update of specific fields through 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.