Spring 对 If-Match Header 的支持

标签 spring etag

说到HTTP条件请求,简单来说,得益于Etag和If-*,我们可以实现响应缓存(Etag+If-None-Match)和乐观锁(Etag+If-Match)。

如我所见,使用提供特定文件管理器 的 Spring 执行响应缓存很方便。 ShallowEtagHeaderFilter 生成 Etag 值并根据 If-None-Match header 检查它。但是,我在 Spring 中找不到相应的组件来做乐观锁。因此,我如何在 Spring 中实现它?

最佳答案

我遇到过同样的问题。在 Spring 中没有找到任何本地方式来检查它。但是您始终可以提取标题并进行手动比较。例如(在 Kotlin 中):

@PutMapping
fun update(         
        @RequestHeader("If-Match") ifMatch: String?
) : ResponseEntity<Void>{

    if(ifMatch != null && ifMatch.trim() != computeETag()){
        return ResponseEntity.status(412).build()
    }

关于Spring 对 If-Match Header 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41278484/

相关文章:

java - 使用 H2 的永久数据库

java - Spring bean基于属性的 Autowiring

case-sensitive - HTTP ETag 应该区分大小写吗?

python - 在 Django 的基于类的通用 View 中使用 ETag/Last-Modified 装饰器

django - 有什么理由不在 Django 中将 USE_ETAGS 与 CommonMiddleware 一起使用?

spring - 如何构建 Spring Cloud Stream JMS ActiveMQ

javascript - 在此上下文中只允许返回数字或 bool 值的变量表达式

java - 引导 Swing 应用程序

php - 在 php 中禁用 ETags?

rest - Etag token 如何在 HTTP 中的条件 GET 中工作?