Restlet中Router使用MODE_STARTS_WITH时如何获取剩余路径?
解决Restlet中ServerResource获取剩余路径的问题
我来帮你搞定这个在Restlet服务里获取剩余路径的需求!根据你的路由结构,我给你两种实用的实现方式:
方法一:利用Restlet内置属性获取
Restlet在使用Template.MODE_STARTS_WITH匹配路由时,会自动把匹配点之后的剩余路径存入请求属性中,你可以通过Template.KEY_REST_PATH这个内置键来获取。
修改你的MyResource类,在初始化方法或者请求处理方法中添加如下代码:
public class MyResource extends ServerResource { @Override protected void doInit() throws ResourceException { super.doInit(); // 获取匹配/m/之后的剩余路径 String remainingPath = (String) getRequest().getAttributes().get(Template.KEY_REST_PATH); // 举个例子:如果请求是/svc/1.0/m/foo/bar,这里拿到的就是/foo/bar System.out.println("剩余路径:" + remainingPath); } // 你的请求处理方法,比如GET请求 @Get public String handleGet() { // 也可以在这里获取剩余路径 String remainingPath = (String) getRequest().getAttributes().get(Template.KEY_REST_PATH); return "剩余路径:" + remainingPath; } }
方法二:自定义模板变量捕获剩余路径
你也可以在挂载路由时通过自定义模板变量来显式捕获剩余路径,这种方式更直观:
修改MyService类中的路由挂载代码:
public class MyService extends Router { public MyService() { // 使用{remainingPath}模板变量匹配剩余所有路径 attach("/m/{remainingPath}", MyResource.class).setMatchingMode(Template.MODE_STARTS_WITH); } }
然后在MyResource中直接通过getAttribute()方法获取:
public class MyResource extends ServerResource { @Get public String handleGet() { String remainingPath = getAttribute("remainingPath"); // 同样,请求/svc/1.0/m/foo/bar时,这里拿到的是foo/bar(注意没有开头的斜杠) return "剩余路径:" + remainingPath; } }
注意事项
- 确保你的嵌套Router(
MyService)的匹配模式设置正确,Template.MODE_STARTS_WITH会让Restlet匹配所有以指定路径开头的请求,而不是严格完全匹配。 - 两种方法获取的剩余路径格式略有不同:内置属性返回的是带开头斜杠的路径,自定义模板变量返回的是不带开头斜杠的部分,你可以根据需求选择。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

