3

我正在使用以下代码对外部系统执行 HTTP POST。问题是外部系统在使用下面的代码时总是得到一个“空”的内容类型。有没有办法在使用 HTTPBuilder 时设置内容类型。

我尝试了其他执行相同请求的工具,但是远程系统获得了一个好的 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 回答