在 Groovy RESTClient / HTTPBuilder 中设置内容类型 "application/pdf"

Setting content type "application/pdf" in Groovy RESTClient / HTTPBuilder

我正在使用 Groovy 的 RESTClient/HTTPBuilder 库向网络服务发送 GET 和 POST 请求。一项资源需要内容类型为 application/pdf 的 PDF。响应将是 XML.

请求 --> POST application/pdf
响应 <-- application/xml

我尝试了以下方法:

def client = new RESTClient(url)
client.post(
  uri: url,
  body: new File('C:/temp/test.pdf').bytes,
  requestContentType: 'application/pdf'
)

def client = new RESTClient(url)
client.setContentType('application/pdf')
client.post(
  uri: url,
  body: new File('C:/temp/test.pdf').bytes,
)

两种变体产生:

No encoder found for request content type application/pdf

据我所知,该库默认不支持 application/pdf

我怎样才能实现上面的内容?

在 @opal 回答后从 2015-10-15 更新

以下代码片段至少将 PDF 放入请求正文中。但是我在 POST 请求中看不到 Content-type: application/pdf。服务器还拒绝了 "Invalid mime type".

的请求
client.encoder.putAt('application/pdf', new MethodClosure(this, 'encodePDF'))
response = client.post(
  uri: url,
  body: new File('C:/temp/test.pdf'),
  requestContentType: 'application/pdf'
)

HttpEntity encodePDF(File pdf) {
  new FileEntity(pdf)
}

您需要做的是定义一个自定义编码器。请遵循以下(不完整的)示例:

import org.codehaus.groovy.runtime.MethodClosure
import org.apache.http.entity.FileEntity

//this part adds a special encoder    
def client = new RESTClient('some host')
client.encoder.putAt('application/pdf', new MethodClosure(this, 'encodePDF'))

//here is the method for the encoder added above
HttpEntity encodePDF(File pdf) {
    new FileEntity(pdf)
}

请尝试上面的示例,如果有效请告诉我。