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

Ok。試行錯誤の末、ようやく完成。デフォルトで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 に答える