1

最新の grails (2.1.2) と rest-client-builder プラグイン バージョン 1.0.3 を使用しています。このリクエストヘッダー値でリクエストを事前認証するターゲットサーバーにカスタムリクエストヘッダー値(SEC_USERなど)を渡そうとしています。次のコードを使用して値を渡していますが、受信側でヘッダー値を取得できません。

RestBuilder rest = new RestBuilder(connectTimeout:5000, readTimeout:20000); 
rest.get("<some uri>") { 
    contentType MediaType.APPLICATION_JSON.toString() 
    header("SEC_USER", "foo") 
} 

RequestCustomizer を見ると、 header() メソッドは headers[name] = value を呼び出すときに HttpHeaders フィールドを設定する必要があります

これは、このプラグインが内部で使用する RestTemplate クラス (メソッド exchange(...)) の問題でしょうか?

4

1 に答える 1

4

Grailsは、動的メソッドを使用してコントローラークラスを拡張します。

header(Object instance, String headerName, Object headerValue)

header()ビルダーを使用している場所によっては、実際にブロックをビルダーに渡す代わりに、これが呼び出される可能性があります。上記のコードをコントローラーに入れると、この動作が見られました。これを解決する1つの方法は、クロージャをのクラスに移動することsrc/groovyです。たとえば、呼び出しコードを次のように変更した場合

def check() {
    RestBuilder rest = new RestBuilder(connectTimeout:5000, readTimeout:20000);
    rest.get("http://localhost:8080/so13789857/hello", Thing.getRestBuilderClosure())
}

そして、から来る閉鎖src/groovy/so/Thing.groovy

static Closure getRestBuilderClosure() {
    return {
        contentType MediaType.APPLICATION_JSON.toString()
        header("SEC_USER", "foo")
    }
}

それは問題を解決しました。

于 2012-12-13T05:20:20.317 に答える