使用不同 HTTP 方法的 Restlet 路由相同 API

Restlet Route Same API with Different HTTP Methods

我有 2 个 API,如下所示:

GET [baseURL]/user/{userID}
DELETE [baseURL]/user/{userID}

如何根据 restlet 中的 HTTP 方法正确路由它们?

我的代码不起作用 -

对于 GET-

Router rootRouter = new Router(getContext());
rootRouter.attach("/user/{userID}", GetUserRest.class);
rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
rootRouter.setRoutingMode(Router.MODE_LAST_MATCH);

删除-

Router rootRouter = new Router(getContext());
rootRouter.attach("/user/{userID}", CancelUserRest.class);
rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
rootRouter.setRoutingMode(Router.MODE_LAST_MATCH);

因为两者都附加了相同的 rootRouter 并且具有相同的 URL 所以 restlet 不知道如果它的 GET 或 DELETE 调用哪个 class。

这里是解决方案-

两者使用相同的路由和相同的 class。然后在 class 中为 GET 和 POST 添加注释。

public class GetUserRest extends ServerResource{
    @Get @Delete
    public String getUser() throws ResourceException {
      if(getMethod().getName().equals("DELETE")) {
            return "delete method";
        } else if(getMethod().getName().equals("GET")) {
            return "get method";
        }
    }

}

您似乎想将 GET 和 DELETE 的实现分开 类,但将它们附加到 Router 中相同的 URL 模式。我已经看到你的答案,但也请考虑一下这个解决方案,以防有人喜欢另一种方法:

我知道 1 种解决方法,制作 3 类:UserUserGetUserDel

rootRouter.attach("/user/{userID}", User.class);

User.java

public class User
{   @Get
    public Object getImpl()
    {   UserGet userGet = new UserGet();
        // init userGet
        return userGet.createResponse();
    }
    @Delete
    public Object delImpl()
    {   UserDel userDel = new UserDel();
        // init userDel
        return userDel.createResponse();
    }
}

我希望这个解决方案也能正常工作。