代码之家  ›  专栏  ›  技术社区  ›  sjain

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

  •  0
  • sjain  · 技术社区  · 6 年前

    我有两个API,如下所示:

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

    这是我不工作的代码-

    为了得到-

    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时调用哪个类。

    2 回复  |  直到 6 年前
        1
  •  0
  •   sjain    6 年前

    对两者使用相同的路由和相同的类。然后在课堂上为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";
            }
        }
    
    }
    
        2
  •  0
  •   Abhishek Oza    6 年前

    看起来您希望将GET和DELETE的实现保持在不同的类中,但将它们附加到中的相同URL模式 Router . 我已经看到了你的答案,但也要考虑一下这个解决方案,以防有人喜欢另一种方法:

    我知道解决这个问题的一种方法,分为三类: User , UserGet UserDel .

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

    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();
        }
    }
    

    我希望这个解决方案也能很好地发挥作用。