使用不同 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 类: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();
}
}
我希望这个解决方案也能正常工作。
我有 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 类: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();
}
}
我希望这个解决方案也能正常工作。