我计划为我的 RESTfull Spring 应用程序支持 ETag。我公开的大部分资源都在 DB 中进行了版本控制。
我知道 ShallowEtagHeaderFilter,这并不完全是我所需要的,因为它只会节省带宽。
Spring MVC 是否有将 ETag 标头与公开的实体版本相关联的生产就绪解决方案?
我计划为我的 RESTfull Spring 应用程序支持 ETag。我公开的大部分资源都在 DB 中进行了版本控制。
我知道 ShallowEtagHeaderFilter,这并不完全是我所需要的,因为它只会节省带宽。
Spring MVC 是否有将 ETag 标头与公开的实体版本相关联的生产就绪解决方案?
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);
}
您可以使用该ServletWebRequest.checkNotModified
调用来检查自定义 eTag,在您的情况下是版本号。同样,这仅在您的内容更改保证版本号更改时才有效。
更多细节在这里。