9

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

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

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

4

2 回答 2

9

spring-data-rest 支持这个开箱即用,请参阅参考文档的条件请求部分

ResponseEntity您还可以使用 Spring Framework 4.2.0+,它支持对Controller 方法返回的类型的条件请求-请参阅参考文档

就像是:

@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);
}
于 2015-06-30T20:47:10.897 回答
0

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

更多细节在这里

于 2015-07-27T18:56:44.450 回答