JAX-RS非常适合实现REST。 你用什么来用Java调用REST服务?

理想情况下,我正在寻找类似JAX-RS的东西(使用注释来描述我想要调用的服务),但允许调用使用其他技术(而不是JAX-RS)实现的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); 

HTH!

JAX-RS(JSR311)没有定义客户端API,但大多数JAX-RS实现都有一个,如Jersey , RESTeasy或Apache CXF 。 Restlet框架还具有客户端支持以及单独的HTTP客户端扩展 。

由于这些是REST的专用库/框架,我建议你研究这些。

我建议你看看WADL项目 。 WADL是REST的WSDL是什么。

首先需要使用WADL定义REST接口。 然后,您可以在其上运行wadl2java工具以生成REST调用的客户端存根。

一旦获得了Web服务的WADL,您就可以实现使用它做其他事情的工具,例如生成服务器端存根,生成文档等。

来自apache的HttpClient主要是(参见http://hc.apache.org/httpcomponents-client-ga/ )。

正如Gandalf和Darrel Miller所说,HttpClient。

您不需要从HTTP参数构造XML。 XML应该只是两个独立系统之间的接口。 使用HttpClient可以使用您可以使用的String值在Java中使用,从那里返回XML是不必要的。

如果此时要返回到XML以便发送到另一个系统,那么在与另一个系统通信之前,您应该考虑将值从HTTP params移回到域/ app逻辑中。 这对于保持应用程序逻辑与系统间通信的适当分离是必要的。