我有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)。
答案 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类:User
,UserGet
和UserDel
。
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();
}
}
我希望该解决方案也能正常工作。