如何为 /{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}/{属性}.
我正在使用 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}/{属性}.