2017-10-06 52 views
0

我'试图让头从HttpBuilder和困惑区别使用headers."Header name"headers["Header name"]Groovy的HttpBuilder得到头的价值

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"]

回答

0

相同取决于你在哪些语法上使用。

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

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

在Groovy中使用运算符只是调用方法,您甚至可以重写它们以更改运算符行为。在Map的情况下,getAt(Object)会使用括号语法检索值,如果没有该名称的对象属性,则propertyMissing(String)会执行值的点符号检索。

在的HeadersDecoratorgetAt(String)情况下确实在Header对象的括号语法检索和propertyMissing(String)确实报头的值的点表示法检索是否存在具有该名称的对象属性。