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 属性 具有该名称。
我正在尝试从 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 属性 具有该名称。