【发布时间】:2017-06-27 06:36:24
【问题描述】:
我正在使用带有Apache Http Client 的 Feign,我想支持以下 jax-rs 接口:
@POST
@Path("/do_something")
void doSomething(@QueryParam("arg") String arg);
但是,ApacheHttpClient 使用 RequestBuilder,它将没有正文/实体的请求的查询参数转换为 UrlEncodedFormEntity。
我正在将我的 API 转换为 jax-rs,并且我不想破坏向后兼容性。有没有办法在不调整我的 API 的情况下使用 Feign? OkHttp 或 Ribbon 客户端是否支持带有查询参数且没有正文/实体的 POST?是否有另一个支持此功能的 java jax-rs 客户端?
另外,RequestBuilder 将查询参数转换为 UrlEncodedFormEntity 是否有原因? apache-httpclient 库中是否有替代的 HttpUriRequest 构建器不执行此操作? RequestBuilder 的 build 方法有以下几行代码:
if (entity == null && (HttpPost.METHOD_NAME.equalsIgnoreCase(method) || HttpPut.METHOD_NAME.equalsIgnoreCase(method))) {
entity = new UrlEncodedFormEntity(parameters, HTTP.DEF_CONTENT_CHARSET);
} else {
// omitted expected behavior
}
在切换到 Feign 之前,我的代码构造了一个类似于以下内容的 HttpUriRequest:
URI uri = new URIBuilder()
.setScheme("https")
.setHost("localhost")
.setPath("service/do_something")
.addParameter("arg", "value")
.build();
HttpUriRequest request = new HttpPost(uri);
【问题讨论】:
标签: http-post apache-httpclient-4.x feign