我打算为我的RESTfull Spring应用程序支持ETag。我公开的大多数资源都是在DB中版本化的。
我知道ShallowEtagHeaderFilter,这不是我需要的,因为它只能节省带宽。
是否有针对Spring MVC的生产就绪解决方案,它将ETag标头与公开的实体版本相关联?
答案 0 :(得分:7)
spring-data-rest支持这种开箱即用的功能,请参阅the conditional request part of the reference documentation。
您还可以使用Spring Framework 4.2.0+,它支持Controller方法返回的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);
}
答案 1 :(得分:0)
您可以使用ServletWebRequest.checkNotModified
来检查自定义eTag,在您的情况下,它将是版本号。同样,只有当您的内容更改保证版本号发生更改时,这才有效。
更多详情here。