在 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)
}
请尝试上面的示例,如果有效请告诉我。
我正在使用 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)
}
请尝试上面的示例,如果有效请告诉我。