【问题标题】:Groovy HttpBuilder getting header's valueGroovy HttpBuilder 获取标头的值
【发布时间】:2017-10-06 09:56:19
【问题描述】:

我正在尝试从 HttpBuilder 获取标头,但对使用 headers."Header name"headers["Header name"] 之间的区别感到困惑

HTTPBuilder builder = new HTTPBuilder();
builder.setUri("https://stackoverflow.com/")
builder.request(Method.GET) {
    response.success = { resp ->
        def header1 = resp.headers."Strict-Transport-Security"
        def header2 = resp.headers["Strict-Transport-Security"]
        println("Header toSting: ${header1}, Header class: ${header1.class}") //result: Header toSting: max-age=15552000, Header class: class java.lang.String
        println("Header toSting: ${header2}, Header class: ${header2.class}") // result: Header toSting: Strict-Transport-Security: max-age=15552000, Header class: class org.apache.http.message.BufferedHeader
    }
}

所以结果是不同的。你能解释一下它是如何工作的吗?我确定something."key"something["key"] 相同

【问题讨论】:

    标签: java groovy syntax maps httpbuilder


    【解决方案1】:

    取决于您使用这些语法的目的。

    如果您在 Map 上使用这些语法,那么您是对的。

    headers 字段不是Map,而是提供这些不同语法的HeadersDecorator 实例。只需单击链接即可访问相应的 JavDoc。

    在 Groovy 中使用运算符只是调用方法,您甚至可以覆盖它们以更改运算符行为。对于MapgetAt(Object) 对值进行括号语法检索,propertyMissing(String) 在没有具有该名称的对象属性时对值进行点符号检索。

    HeadersDecorator 的情况下,getAt(String)Header 对象进行括号语法检索,如果没有具有该名称的对象属性,propertyMissing(String) 对标头的值进行点符号检索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2012-02-04
      • 2015-10-11
      相关资源
      最近更新 更多