理想情况下,我正在寻找类似 JAX-RS 的东西(使用注释来描述我想要调用的服务),但允许调用使用其他技术(不是 JAX-RS)实现的 REST 服务。有什么建议吗?
5 回答
JAX-RS (JSR311) 没有定义客户端 API,但大多数 JAX-RS 实现都有一个,例如Jersey、RESTeasy或Apache CXF。Restlet 框架还具有客户端支持以及单独的HTTP 客户端扩展。
由于这些是 REST 的专用库/框架,我建议您查看这些。
您在评论中写道,您“希望获得比 HttpClient 更高级别的东西”。听起来Restlet会很完美。它为实现和使用RESTful Web 应用程序提供了一个高级 API,并为低级实现提供了即插即用适配器。
例如,要使用 Restlet 1.1 将 webform 发布到资源:
Client client = new Client(Protocol.HTTP);
Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");
Response response = client.post("http://host/path/to/resource", form.getWebRepresentation())
if (response.getStatus().isError()) {
// deal with the error
return;
}
if (response.isEntityAvailable()) {
System.out.println(response.getEntity().getText());
}
如果您需要在请求上设置更多选项,可以使用 Request 对象:
Form form = new Form();
form.add("foo", "bar");
form.add("abc", "123");
Request request = new Request(Method.POST, "http://host/path/to/resource");
request.setEntity(form.getWebRepresentation());
request.setReferrerRef("http://host/path/to/referrer");
Response response = client.handle(request);
!
大部分来自 apache 的HttpClient (参见http://hc.apache.org/httpcomponents-client-ga/)。
正如 Gandalf 和 Darrel Miller 所说,HttpClient。
您不需要从 HTTP 参数构造 XML。XML 应该只是两个独立系统之间的接口。使用 HttpClient 可以让您使用 Java 中的 String 值,无需再从那里返回 XML。
如果此时您要返回 XML 以发送到另一个系统,您应该考虑在与另一个系统通信之前将值从 HTTP 参数移回您的域/应用程序逻辑。这对于保持应用程序逻辑与系统间通信的适当分离是必要的。