2017-10-06 6 views
0

Je suis en essayant d'obtenir les en-têtes depuis HttpBuilder et confus au sujet de différence entre l'utilisation et headers."Header name"headers["Header name"]Groovy HttpBuilder obtenir la valeur d'en-tête

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

Ainsi les résultats sont différents. Pouvez-vous expliquer comment cela fonctionne? J'étais sûr que something."key" est le même que something["key"]

Répondre

0

Dépend de ce que vous utilisez ces syntaxes sur.

Si vous utilisez ces syntaxes sur un Map, vous avez raison.

Mais le champ headers n'est pas un Map, mais une instance HeadersDecorator qui fournit ces différentes syntaxes. Cliquez simplement sur le lien pour accéder au JavDoc correspondant.

L'utilisation d'opérateurs dans Groovy consiste simplement à appeler des méthodes et vous pouvez même les remplacer pour modifier le comportement de l'opérateur. Dans le cas de Map, getAt(Object) fait la récupération de la syntaxe de parenthèse de la valeur, propertyMissing(String) fait la récupération de notation de point de la valeur s'il n'y a aucune propriété d'objet avec ce nom.

En cas de HeadersDecoratorgetAt(String)-ce que la récupération de la syntaxe de support de l'objet Header et propertyMissing(String)-ce que la récupération de la notation des points de la valeur de l'en-tête s'il n'y a pas de propriété d'objet avec ce nom.