【问题标题】:Multiple get methods in single Resource class with Restlet带有 Restlet 的单个 Resource 类中的多个 get 方法
【发布时间】:2011-09-30 09:53:11
【问题描述】:

这是我的代码:

这是我的应用类>>>

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。 这可能吗 ?? 还是我错了? 如果这是不可能的,那么任何人都可以告诉我任何其他选择吗?

【问题讨论】:

    标签: java tomcat restlet


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      现在,为了完整起见,我发现有点难以理解您的 API 语义:我可以询问任何用户的登录状态,还是只询问我的?不是很清楚,但我知道这不是重点。

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

      希望对你有帮助。

      【讨论】:

      • 感谢您的回复。我转向resteasy来实现这一目标。但在这两个框架中都无法访问多个参数函数。例如我有一种方法@Post
      • 我尝试这样做但无法使用查询参数实现
      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2018-01-03
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多