【问题标题】:Generating ETAG using spring boot使用 Spring Boot 生成 ETAG
【发布时间】:2015-08-01 17:28:27
【问题描述】:

我是弹簧靴的新手。 每当从我的控制器类执行 POST 时,我都想生成 ETAG。

下面是创建的配置类:

@Configuration
public class WebConfiguration {
    @Bean
    public Filter shallowEtagHeaderFilter() {
        return new ShallowEtagHeaderFilter();
    }
}

我的主类用@EnableAutoConfiguration 注释。 据我了解,我从 POST 收到的响应对象应该为我提供 ETAG 标头。 请任何人都可以在我的 POST/GET?PUT 调用期间提供一个 Spring Boot 示例来生成 ETag。

【问题讨论】:

    标签: java spring-boot etag


    【解决方案1】:

    您使用的 ShallowEtagHeaderFilter 只会生成一个 ETag 以响应 GET 请求。

    当您对刚刚创建/更新的资源执行GET 时,将显示 ETag 标头。

    如果您正在使用 Spring Repository REST 导出器(即 Spring Data Rest),那么它内置了 ETag 支持,这也是毫无价值的。您的实体类只需要一个 Long或用@javax.persistence.Version注释的Timestamp字段

    【讨论】:

    • 这是否意味着当我执行 PUT、POST 或 DELETE 时,我不得不在请求标头中设置 ETag?
    • 是的,您必须在“If-Match”标头中发送请求中的 ETag 值。如果 ETag 不匹配,服务器将拒绝该请求。
    • @adamp 它对我不起作用,从 GET 获取 Etag(123),在 PUT 的标头中使用 If-Match=123 并执行它,并重复相同的步骤 - If-Match=123在 PUT 的标题中并执行它。它起作用了,我认为它不应该起作用。一旦第一次 PUT 发生,Etag 就会更改它。对于第二个 PUT,它应该抛出错误,但它没有。我也在实体 javax.persistence.Version 中使用 Long 变量。
    • 嗨@kumar,您是否在第一次 PUT 后检查 Etag 是否增加到 124?
    • @Version 根本没有增加值,它始终保持不变,即使在通过更改数据进行多次 PUT 操作之后也是如此。
    猜你喜欢
    • 2021-10-29
    • 2017-05-28
    • 2018-08-16
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2014-12-31
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多