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

时间:2018-11-28 16:10:06

标签: java restlet

我有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);

对于DELETE-

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)。

2 个答案:

答案 0 :(得分:0)

这是解决方案-

对两者使用相同的路由和相同的类。然后在课堂上为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";
        }
    }

}

答案 1 :(得分:0)

您似乎希望将GET和DELETE的实现保留在单独的类中,但是将它们附加到Router中的相同URL模式中。我已经看到了您的答案,但也请考虑一下此解决方案,以防有人喜欢其他方法:

我知道解决此问题的一种方法,将其分为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();
    }
}

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