Groovy HttpBuilder 正在获取 header 的值

Groovy HttpBuilder getting header's value

我正在尝试从 HttpBuilder 获取 headers 并且对使用 headers."Header name"headers["Header name"]

之间的区别感到困惑
HTTPBuilder builder = new HTTPBuilder();
builder.setUri("https://whosebug.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"]

相同

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

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

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

在 Groovy 中使用运算符只是调用方法,您甚至可以覆盖它们以更改运算符行为。在Map的情况下,getAt(Object)做值的括号语法检索,propertyMissing(String)如果没有object 属性做值的点符号检索] 用那个名字。

如果 HeadersDecorator getAt(String) 执行 Header 的括号语法检索 object 和 propertyMissing(String) 执行值的点符号检索header 如果没有 object 属性 具有该名称。