我使用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)
}
答案 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)
}
请尝试上面的示例,让我知道它是否有效。