如何在groovy中指定请求中的内容类型?

时间:2010-08-16 12:43:16

标签: groovy exchange-server exchangewebservices httpbuilder

我正在尝试使用groovy httpbuilder向微软交换网络服务(EWS)发帖。我的问题是,我无法设置正确的请求内容类型。图书馆似乎有自己的想法。

有没有人有想法?

干杯,  斯蒂芬

这是我的代码:

    url = "http://exchangeserver/ews/Exchange.asmx"
    p_body = "<soap request >...";
    p_contentType = "text/xml; charset=utf-8"
    customHeaders = ["SOAPAction":"LONG_URL"]

    def http = new HTTPBuilder(url);
    http.auth.basic(authMap.username, authMap.password)

    // contentType: p_contentType,
    http.request( POST ) 
    {
        contentType = ContentType.TEXT // We dont want to get the response parsed
        headers['Accept'] = "*/*"; // Just make sure we accept everything

        // Support additional headers
        for (x in customHeaders) {
            headers[x] = customHeaders[x]   
        }


        /// Exchange expects "text/xml; charset=utf-8" and nothing else :(

//  This sends text/plain
//      body = p_body
//      requestContentType = p_contentType

        // This sends application/xml, not my "text/xml; charset=utf-8" content-type.
            send p_contentType, p_body 

        // a successfull request should be "logged" ;)
        response.success = { resp, xml ->
            println xml
        }
    }

1 个答案:

答案 0 :(得分:1)

好吧,阅读和调试代码,我发现这是我当前的解决方法/解决方案。不像我希望的那样漂亮:

// We overwrite the default text/xml encoder,
// because it replaces our contentType with 'application/xml'
// But Exchange only likes 'text/xml; charset=utf-8'
http.encoder.'text/xml' = {
    body -> def se = new StringEntity(body, "utf-8")
    se.setContentType("text/xml; charset=utf-8")
    return se
}