适用于Android的Java REST客户端API

时间:2010-12-06 15:40:05

标签: java android web-services rest

我的服务器应用程序使用JAX-RS(Jersey实现)公开RESTful Web服务。调用此服务的最佳方法是什么(使用Apache HttpClient除外)?我想知道来自Jersey,Restlet,RESTeasy和其他框架的REST客户端API是否适用于Android。

谢谢, 西奥

5 个答案:

答案 0 :(得分:9)

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>

android端的一些示例代码

    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;
    }
}

这很简单,所有编写的代码都是可重用的,样板代码几乎不存在

希望这对每个人都有所帮助。

答案 1 :(得分:5)

如果您想要比处理URLConnection更舒适一点,请查看Resty for Java。 简单,轻巧,但仍然很新。

http://beders.github.com/Resty

答案 2 :(得分:3)

前几天进入这一个,还没想过,但似乎在android上工作: http://crest.codegist.org

答案 3 :(得分:2)

这是一个很好的例子,其中包含所有内容的源代码,包括EJB,RestEasy和Android:

http://code.google.com/p/android-jbridge/

答案 4 :(得分:0)

对于最简单的情况,您可以使用java.net.URL及其openConnection()方法发出请求。然后是数据绑定库(JAXB for XML,Jackson for JSON)来处理响应(如果你使用POST xml或json,可能会请求)。