我们目前正在使用HttpClient 4.3与其他服务提供商进行所有REST通信,但是,我们最近的一个提供商在API中有一些自定义方法。
我试图找出一种发送自定义方法的方法(方法不在标准中,如GET,POST,PUT等)。
之前有人使用HttpClient有过类似的经历吗? 谢谢!
答案 0 :(得分:6)
我建议您使用RequestBuilder
类(javadoc)来构造Request
个对象。静态RequestBuilder.create
方法允许您为请求对象指定任何“方法”字符串。
答案 1 :(得分:0)
通过扩展HttpRequestBase来实现FOO
方法:
public class HttpFoo extends HttpRequestBase{
public final static String METHOD_NAME = "FOO";
public HttpFoo() {
super();
}
@Override
public String getMethod() {
return METHOD_NAME;
}
public HttpFoo(final String uri) {
super();
setURI(URI.create(uri));
}
public String getName() {
return "FOO";
}
}
然后可以像使用任何其他现有方法(如GET(HttpGet)等)一样使用上述方法。
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpFoo fooMethod = new HttpFoo(fooUrl);
HttpResponse response = httpClient.execute(fooMethod);
经过测试
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
答案 2 :(得分:0)
假设您需要一个名为SNAPSHOT的自定义http方法,可以执行以下操作:
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
public class SnapshotMethod extends EntityEnclosingMethod {
public SnapshotMethod(String uri) {
super(uri);
}
@Override
public String getName() {
return "SNAPSHOT";
}
}
然后在您的API客户端实现部分(使用apache http客户端)中:
HttpMethod snapShot = new SnapshotMethod(url);
BufferedInputStream inputStream = new BufferedInputStream(new ByteArrayInputStream(requestbody).getBytes(Charset.forName("CHARSET_NAME"))));
((EntityEnclosingMethod) snapShot) .setRequestEntity(newInputStreamRequestEntity(inputStream, "CONTENT_TYPE"));
Integer code = client.executeMethod(snapShot);