2013-09-03 109 views
7

Tôi đang lên kế hoạch hỗ trợ ETag cho ứng dụng RESTfull Spring của mình. Hầu hết các tài nguyên tôi phơi bày đều được phiên bản trong DB.Hỗ trợ ETag trong Mùa xuân cho thực thể được phiên bản

Tôi biết ShallowEtagHeaderFilter, không chính xác, những gì tôi cần, vì nó chỉ tiết kiệm băng thông.

Có giải pháp sản xuất sẵn sàng cho Spring MVC liên kết tiêu đề ETAG với phiên bản thực thể được phơi sáng không?

+4

Tôi tìm thấy một bài viết hay http://www.infoq.com/articles/etags, tương tự như những gì tôi cần, nhưng vẫn cần một số công việc cần làm. – mavarazy

+1

Hi mavarazy bạn đã xem https://github.com/patrickvankann/spring-conditional-response chưa? –

+0

Không, tôi không, cảm ơn liên kết – mavarazy

Trả lời

6

spring-data-rest hỗ trợ tính năng out-of-the-box này, xem the conditional request part of the reference documentation.

Bạn cũng có thể sử dụng Spring Framework 4.2.0+ hỗ trợ các yêu cầu có điều kiện cho các loại ResponseEntity được trả về bằng các phương thức Bộ điều khiển - see reference documentation.

Cái gì như:

@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); 
} 
0

Bạn có thể sử dụng ServletWebRequest.checkNotModified gọi để kiểm tra ETags tùy chỉnh mà trong trường hợp của bạn sẽ là số phiên bản. Một lần nữa, điều này sẽ chỉ hoạt động nếu các thay đổi đối với nội dung của bạn đảm bảo thay đổi về số phiên bản.

Chi tiết khác here.