如何为 /{repository}/{id}/{属性} Spring-data-rest 验证 If-Match header?

How to make verify If-Match header for /{repository}/{id}/{property} Spring-data-rest?

我正在使用 spring-data-rest 并且请求像 PUT /{repository}/{id}/{property}

Body:
/12
Accept: application/json
Content-Type: text/uri-list
If-Match: 42 (incorrect value)

我预计会收到 412 错误,但返回 204。

调试时我发现 DispatcherServlet 使用 HandlerExecutionChain with [org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController#createPropertyReference(RootResourceInformation, HttpMethod, CollectionModel, Serializable, String)] and 3 interceptors 并且该方法不检查 if-Match 值。

并且只有像这样的请求:PUT、PATCH、DELETE /{repository}/{id} 使用 HandlerExecutionChain with [org.springframework.data.rest.webmvc.RepositoryEntityController#patchItemResource(RootResourceInformation, PersistentEntityResource, Serializable, PersistentEntityResourceAssembler, ETag, String)] and 3 interceptors 检查 if-Match 值。

是否可以让 spring-data-rest 验证 PUT、DELETE、PATCH /{repository}/{id}/{property} 的 if-Match 值?

Spring 根据official documentation.

,数据 REST 需要一个用 @Version 注释的版本字段来实现 ETag

如果要对嵌入式 属性(字段)进行版本控制,如何单独对单个嵌入式 属性 进行版本控制?答案是不可能的。

如果你想对引用的 属性(JPA 连接)进行版本控制,那么你应该向 /{that-property-repository}/{id} 而不是 /{ 发出 PUT/PATCH/DELETE 请求存储库}/{id}/{属性}.