我的服务器应用程序使用JAX-RS(Jersey实现)公开了一个RESTful Web服务。除了使用Apache HttpClient之外,调用此服务的最佳方法是什么?我想知道来自Jersey、Restlet、RESTeasy和其他框架的REST客户端API是否适用于Android。
谢谢, Theo
谢谢, Theo
Resteasy-mobile是一个完美的解决方案。
它基本上是全功能的resteasy(具有客户端框架),但使用Apache HTTP Client而不是HttpURLConnection(在Android上不存在)。
这里有更多关于使用的信息(http://docs.jboss.org/resteasy/docs/2.3.1.GA//userguide/html_single/index.html#RESTEasy_Client_Framework)
这里是maven的内容
<dependency>
<groupId>org.jboss.resteasy.mobile</groupId>
<artifactId>resteasy-mobile</artifactId>
<version>1.0.0</version>
</dependency>
public class RestServices {
static RegisterSVC registerSVC;
static PushSVC pushSVC;
static TrackerSVC trackerSVC;
RestServices() {
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
}
public static RegisterSVC getRegisterSVC() {
return ProxyFactory.create(RegisterSVC.class,"http://143.248.194.236:8080/notification");
}
public static PushSVC getPushSVC() {
return ProxyFactory.create(PushSVC.class,"http://143.248.194.236:8080/notification");
}
public static TrackerSVC getTrackerSVC() {
return ProxyFactory.create(TrackerSVC.class,"http://143.248.194.236:8080/notification");
}
}
在Android和服务器端上,JAX-RS服务定义(PushSVC.java)
@Path("/mobile")
public interface PushSVC {
/*
Sample
curl --data '{"collapseKey":"asdf","contentList":{"aaaa":"you","ssss":"you2"}}' -X POST -H 'Content-type:application/json' -v http://localhost:8080/notification/mobile/11111/send
*/
@POST
@Path("/{uuid}/send")
@Consumes(MediaType.APPLICATION_JSON)
String sendPush( MessageVO message, @PathParam("uuid") String uuid);
}
模型MessageVO定义
public class MessageVO {
String collapseKey;
HashMap<String, String> contentList;
public MessageVO() {
}
public MessageVO(String collapseKey) {
this.collapseKey = collapseKey;
contentList = new HashMap<String, String>();
}
public void put(String key, String value)
{
this.contentList.put(key,value);
}
public String getCollapseKey() {
return collapseKey;
}
public HashMap<String, String> getContentList() {
return contentList;
}
}
这是在Android上的方法调用
public class Broadcast extends AsyncTask<Context,Void,Void>
{
@Override
protected Void doInBackground(Context... contexts) {
MessageVO message = new MessageVO("0");
message.put("tickerText","Ticker ne` :D");
message.put("contentTitle","Title ne` :D");
message.put("contentText","Content ne` :D");
RestServices.getPushSVC().sendPush(message,TrackInstallation.id(contexts[0]).toString());
return null;
}
}
这很简单,所有编写的代码都是可重用的,样板代码几乎不存在。
希望这能帮助大家。
java.net.CookieManager
类,该类自Android Level 9(API Reference)以来已经存在于Android中。因此我无法加载该类。 - u2ix对于最简单的情况,您可以使用java.net.URL及其openConnection()方法来发出请求。然后使用数据绑定库(XML使用JAXB,JSON使用Jackson)来处理响应(如果您POST xml或json,则可能还需要处理请求)。