![](/img/trans.png)
[英]Spring Data Rest - How to prevent update of specific fields through PATCH?
[英]Spring Data Rest - How to prevent PUT/PATCH updates to child entities of aggregate root
我正在構建一個基於Spring Data REST / Spring HATEOAS的應用程序,並且我正在嘗試遵循此處(以及其他地方)概述的DDD原則:
特別是通過專用資源的聚合和復雜狀態變化的概念。
還要避免將HTTP PATCH或PUT用於業務域的(復雜)狀態轉換,因為您錯過了有關觸發此更新的實際業務域事件的大量信息。 例如,更改客戶的郵件地址是對新“ChangeOfAddress”資源的POST,而不是具有不同郵件地址字段值的“Customer”資源的PATCH或PUT。
我正在努力的是一種強制執行此操作的方法,同時允許對聚合根進行外觀修改。
使用這個簡化的例子:
@Entity
public class Customer
{
private @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id;
private String name;
private String comment;
@Access(AccessType.PROPERTY)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Address> addresses = new HashSet<>();
... getters and setters
public void addAddress(Address address)
{
addresses.add(address);
... custom code to raise events etc
}
}
public interface Customer extends CrudRepository<Customer, Long>
{
}
允許更改化妝品(例如更新評論)但阻止直接更新子集合的更改的最佳/正確方法是什么?
如果嘗試修改子集合,如果讓setter拋出異常,我唯一能想到的就是這樣做。
@Entity
public class Customer
{
private @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id;
private String name;
private String comment;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@Access(AccessType.PROPERTY)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Address> addresses = new HashSet<>();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.