使用rest-client-builder插件发出传递自定义标头值的问题

时间:2012-12-09 17:34:33

标签: grails grails-plugin grails-2.0 rest-client

我正在使用最新的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()方法应该在调用时设置HttpHeaders字段 headers [name] = value

这可能是此插件在内部使用的RestTemplate类(方法交换(...))中的问题吗?

1 个答案:

答案 0 :(得分:4)

Grails使用动态方法增强控制器类:

header(Object instance, String headerName, Object headerValue)

根据您使用构建器的位置,可能会调用此代码,而不是实际将header()块传递给构建器。当我将上面的代码放入控制器时,我看到了这种行为。解决此问题的一种方法是将闭包移到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")
    }
}

它解决了这个问题。