使用Restlet的单个Resource类中的多个get方法

时间:2011-09-30 09:53:12

标签: java tomcat restlet

这是我的代码:

这是我的应用类>>>

import org.restlet.Application;

import org.restlet.Restlet;

import org.restlet.routing.Router;

import firstSteps.UserResource;

public class FirstStepsApplication extends Application {

    @Override

    public synchronized Restlet createRoot() {

        Router router = new Router(getContext());

        router.attach("/hello", UserResource.class);

        router.attach("/isuserloggedin",UserResource.class);

        return router;
    }

}

这是资源类>>>

import org.restlet.resource.Get;

import org.restlet.resource.ServerResource;

/**
 * Resource which has only one representation.
 * 
 */  

public class UserResource extends ServerResource {

    @Get

    public String userLogin() {

        return "This is userLogin method";
     }


    @Get

    public boolean isUserLoggedIn(){

        return false;

    }
}

/hello& /isuserloggedin映射到资源类相同但是 我想要的是:当有/hello时,应该调用userLogin方法 当有/isuserloggedin时,必须调用isUserLoggedIn。 这可能吗 ?? 或者我错了? 如果这不可能,那么任何人都可以告诉我任何其他选择吗?

2 个答案:

答案 0 :(得分:4)

在Restlet 2.1(尝试M7或更高版本)中,可以将两个HTTP GET调用分派给同一资源类中的两个Java方法。这是通过利用这样的查询参数来完成的:

import org.restlet.resource.Get;

import org.restlet.resource.ServerResource;

/**
 * Resource which has only one representation.
 * 
 */  

public class UserResource extends ServerResource {

    @Get
    public String userLogin() {

        return "This is userLogin method";
     }


    @Get("?loggedIn")

    public boolean isUserLoggedIn(){

        return false;

    }
}

但是,正如已经指出的那样,最好使用单独的资源类。

答案 1 :(得分:0)

自从我上次使用Restlet以来已经过去了一段时间,无论如何,如果你正在实现一个完整的REST API,我希望这两个资源是真正需要的资源。否则,资源应该映射到恰好一个表示,恕我直言。

将两个URI映射到一个资源类,而不是两个,每个都实现GET方法有什么好处?它似乎在那里增加了一些含糊之处,没有任何好处。

我会在用户表示中返回状态(已记录或未记录)。

现在,为了完整起见,我发现您的API语义有点难以理解:我可以询问任何用户的记录状态,还是仅仅是我的?这不是很清楚,但我明白这不是主要观点。

就像一个很好的阅读,你可能想看看一些流行的REST api,看看它们如何管理类似于你的问题,即。我特别喜欢Github Users' API

希望它有所帮助。