这是我的代码:
这是我的应用类>>>
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
。
这可能吗 ??
或者我错了?
如果这不可能,那么任何人都可以告诉我任何其他选择吗?
答案 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。
希望它有所帮助。