1

我正在使用 grails2.4.4 和 grails-rest-client-builder: 2.0.0 插件。我需要调用一个接受请求方法 PATCH 的 REST URL。但我无法使用此插件:我正在使用以下代码:

def rest = new RestBuilder()
def resp = rest.patch("$URL") {
    header 'Authorization', "Bearer $accessToken"
}

我收到以下错误:

Invalid HTTP method: PATCH. Stacktrace follows:
 Message: Invalid HTTP method: PATCH
 Line | Method
  440 | setRequestMethod    in java.net.HttpURLConnection
  307 | invokeRestTemplate  in grails.plugins.rest.client.RestBuilder
  280 | doRequestInternal . in     ''

谁能帮帮我?

4

1 回答 1

4

好的。经过几次尝试和错误,终于成功了。由于默认java.net.HttpURLConnection不支持像 PATCH 这样的自定义请求方法,我得到了那个错误。所以我需要去一些commons-httpclient支持这种请求方法的第三方库。所以我注入commons-httpclient(now it is named as apache-httpcomponents)以使其与 PATCH 请求方法一起工作。

以下是我为使其工作所做的更改:

首先在grails中添加依赖BuildConfig.groovy

runtime "org.apache.httpcomponents:httpclient:4.3.6"

解决方案#1

如果您想手动创建对象:

RestTemplate restTemplate=new RestTemplate()
restTemplate.setRequestFactory(new  HttpComponentsClientHttpRequestFactory());

def rest=new RestBuilder(restTemplate)
def resp = rest.patch("$URL"){
        header 'Authorization', "Bearer $accessToken"
    }

解决方案#2

使用 Grails-Spring 注入:

在下面添加配置resources.groovy

import grails.plugins.rest.client.RestBuilder
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory
import org.springframework.web.client.RestTemplate

beans={
   httpClientFactory (HttpComponentsClientHttpRequestFactory)
   restTemplate (RestTemplate,ref('httpClientFactory'))
   restBuilder(RestBuilder,ref('restTemplate'))
}

restBuilder在您的班级中注入:

class MyRestClient{
   def restBuilder

   ....

   def doPatchRequest(){
   def resp=restBuilder.patch("$API_PATH/presentation/publish?id=$presentationId"){
            header 'Authorization', "Bearer $accessToken"
        };

    //do anything with the response
   }

}

希望这可以帮助某人。

于 2015-01-17T17:01:59.013 回答