3

次のコードを使用して、外部システムに対して HTTP POST を実行しています。問題は、以下のコードを使用すると、外部システムが常に「null」コンテンツ タイプを取得することです。HTTPBuilder を使用するときに contenttype を設定する方法はありますか。

同じリクエストを実行する他のツールを試してみましたが、リモート システムは適切な contentType ('application/json') を取得します。

    def execute(String baseUrl, String path, Map requestHeaders=[:], Map query=[:], method = Method.POST) {
    try {
        def http = new HTTPBuilder(baseUrl)
        def result = null

        // perform a ${method} request, expecting TEXT response
        http.request(method, ContentType.JSON) {
            uri.path = path
            uri.query = query

            // add possible headers
            requestHeaders.each { key, value ->
                headers."${key}" = "${value}"
            }

            // response handler for a success response code
            response.success = { resp, reader ->
                result = reader.getText()
            }
        }
        return result
    } catch (groovyx.net.http.HttpResponseException ex) {
        ex.printStackTrace()
        return null
    } catch (java.net.ConnectException ex) {
        ex.printStackTrace()
        return null
    }
}
4

2 に答える 2

1

リクエストに特定のヘッダーを追加すると、問題が解決するようです。

def execute(String baseUrl, String path, Map requestHeaders=[:], Map query=[:], method = Method.POST) {
try {
    def http = new HTTPBuilder(baseUrl)
    def result = null

    // perform a ${method} request, expecting TEXT response
    http.request(method, ContentType.JSON) {
        uri.path = path
        uri.query = query
        headers.'Content-Type' = 'application/json'

        // add possible headers
        requestHeaders.each { key, value ->
            headers."${key}" = "${value}"
        }

        // response handler for a success response code
        response.success = { resp, reader ->
            result = reader.getText()
        }
    }
    return result
} catch (groovyx.net.http.HttpResponseException ex) {
    ex.printStackTrace()
    return null
} catch (java.net.ConnectException ex) {
    ex.printStackTrace()
    return null
}

}

于 2013-02-26T10:00:22.307 に答える
0

リクエストブロックの本文にrequestContentTypeを設定してみてください...

http.request(method, ContentType.JSON) {
            uri.path = path
            uri.query = query
            requestContentType = groovyx.net.http.ContentType.URLENC

     .......
}
于 2013-02-25T15:54:40.307 に答える