3

Groovy HTTPBuilder を使用して POST を送信しようとしていますが、送信するデータは既に URL エンコードされているため、HTTPBuilder にそのまま POST させたいと考えています。私は次のことを試しました:

def validationString = "cmd=_notify-validate&" + postData
def http = new HTTPBuilder(grailsApplication.config.grails.paypal.server)
http.request(Method.POST) {
    uri.path = "/"
    body = validationString
    requestContentType = ContentType.TEXT

    response.success = { response ->
            println response.statusLine
    }
}

しかし、それは私に NullPointerException を与えます:

java.lang.NullPointerException
at groovyx.net.http.HTTPBuilder$RequestConfigDelegate.setBody(HTTPBuilder.java:1200)
4

1 に答える 1

6

事前にエンコードされたフォーム値を使用しているため、デフォルトのマップベースのコンテンツ タイプ エンコーダーは使用できません。EncoderRegistryが本文の処理方法を認識できるように、コンテンツ タイプを指定する必要があります。

本文が URL エンコードされた文字列であることを指定するコンテンツ タイプで HttpBuilder を作成できます。

def http = new HTTPBuilder(url, ContentType.URLENC)

または、コンテンツ タイプを明示的に渡すリクエストを作成します。

http.request(Method.POST, ContentType.URLENC) {
  // etc.

参考までに、これが私がそれを理解した方法です-質問を読む前は知りませんでした。

合計時間は 5 ~ 10 分程度だったと思います。ただし、ドキュメントを介して比較的短い順序でこの種のものを見つけること可能であることを納得していただければ幸いです。

IMO これは、開発者がグルーミングし、ヒーローのように見せるための重要なスキルです。そして、それは楽しいことができます。

于 2012-05-31T16:55:18.727 に答える