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

时间:2015-10-13 20:11:59

标签: rest groovy content-type httpbuilder

我使用Groovy的RESTClient / HTTPBuilder库将GET和POST请求发送到Web服务。一种资源需要内容类型为application/pdf的PDF。响应将是XML。

请求 - > POST申请/ 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,
)

两种变体都产生:

  

找不到请求内容类型application / pdf

的编码器

据我所知,图书馆默认不支持application/pdf

如何实施上述内容?

@opal

回复后,2015-10-15更新

以下代码段至少将PDF放入请求正文中。但是我在POST请求中看不到Content-type: application/pdf。此外,服务器使用"无效的mime类型"。

拒绝请求
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)
}

1 个答案:

答案 0 :(得分:1)

您需要做的是定义自定义编码器。按照下面的(不完整)示例:

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)
}

请尝试上面的示例,让我知道它是否有效。