2017-10-06 2 views
0

Ich bin versucht, Header zu bekommen in von HttpBuilder und verwirrt über Unterschied zwischen headers."Header name" und headers["Header name"] mitGroovy HttpBuilder Wert bekommen Kopf

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 
    } 
} 

So Ergebnisse sind unterschiedlich. Kannst du erklären, wie es funktioniert? Ich war mir sicher, dass something."key" das gleiche ist wie something["key"]

Antwort

0

Hängt davon ab, was Sie diese Syntaxen verwenden.

Wenn Sie diese Syntax auf einem Map verwenden, haben Sie Recht. Das headers Feld ist kein Map, sondern eine HeadersDecorator Instanz, die diese verschiedenen Syntaxen bereitstellt. Klicken Sie einfach auf den Link, um zum jeweiligen JavDoc zu gelangen.

Bei der Verwendung von Operatoren in Groovy werden nur Methoden aufgerufen und Sie können sie sogar überschreiben, um das Verhalten des Operators zu ändern. Im Fall von Map, getAt(Object) führt die Klammernsyntaxabfrage des Werts propertyMissing(String) die Punktnotation aus, um den Wert abzurufen, wenn keine Objekteigenschaft mit diesem Namen vorhanden ist.

Bei den HeadersDecoratorgetAt(String) funktioniert die Konsole Syntax Abrufen des Header Objekts und propertyMissing(String) macht die Punktnotation Abrufen des Wertes des Headers, wenn keine Objekt-Eigenschaft mit diesem Namen ist.

Verwandte Themen