无论如何使用Java HttpClient发送Custom Method

时间:2013-12-13 06:29:41

标签: java rest apache-httpclient-4.x

我们目前正在使用HttpClient 4.3与其他服务提供商进行所有REST通信,但是,我们最近的一个提供商在API中有一些自定义方法。

我试图找出一种发送自定义方法的方法(方法不在标准中,如GET,POST,PUT等)。

之前有人使用HttpClient有过类似的经历吗? 谢谢!

3 个答案:

答案 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);