2017-10-06 109 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)確實報頭的值的點表示法檢索是否存在具有該名稱的對象屬性。