【问题标题】:ETag support in Spring for versioned entitySpring 中对版本化实体的 ETag 支持
【发布时间】:2013-09-06 05:03:27
【问题描述】:

我计划为我的 RESTfull Spring 应用程序支持 ETag。我公开的大部分资源都在 DB 中进行了版本控制。

我知道 ShallowEtagHeaderFilter,这并不完全是我所需要的,因为它只会节省带宽。

是否有针对 Spring MVC 的生产就绪解决方案,将 ETag 标头与公开的实体版本相关联?

【问题讨论】:

标签: java spring rest spring-mvc http-headers


【解决方案1】:

spring-data-rest 支持这个开箱即用,请参阅the conditional request part of the reference documentation

您还可以使用 Spring Framework 4.2.0+,它支持对控制器方法返回的 ResponseEntity 类型的条件请求 - see reference documentation

类似:

@RequestMapping("/book/{id}")
public ResponseEntity<Book> showBook(@PathVariable Long id) {

    Book book = findBook(id);
    String version = book.getVersion();

    return ResponseEntity
                .ok()
                .cacheControl(CacheControl.maxAge(30, TimeUnit.DAYS))
                .eTag(version) // lastModified is also available
                .body(book);
}

【讨论】:

    【解决方案2】:

    您可以使用ServletWebRequest.checkNotModified 调用来检查自定义电子标签,在您的情况下,电子标签就是版本号。同样,这仅在您的内容更改保证版本号更改时才有效。

    更多详情here.

    【讨论】:

      猜你喜欢
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2022-11-09
      相关资源
      最近更新 更多