我在Restlet的2.1-M7版本上工作(我必须更新它,但这是另一个问题)
我直接使用Restlet,在启动组件之前没有任何网络服务器。在其上添加一些虚拟主机。
在主机中我添加方法附加的入口点(字符串uriPattern,Restlet入口点)
我的问题是: 当我添加附加uri“/ test”与入口点Test.class(带有打印的方法:“hello world”)和卷曲时,我可以调用“/ testmeagain”并且它的工作(返回“hello world”)因为这是一种模式吗?
所以我用它:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true
尝试“/ test $”但是在curl“/ test”和“/ testmeagain”现在返回404
也许我错过了什么?
如果您有任何建议或回应来帮助我,请感谢您。
答案 0 :(得分:1)
事实上,在Restlet中,路由有匹配模式。以下是框架中的行为:
attach("/test", ...)
之类的内容,/test
和/testsomething
等网址将匹配。attach("/test", ...)
之类的内容,只有网址/test
才会匹配。 attach
方法返回一个模板路由,您可以在其上更改此匹配:
TemplateRoute route = component.getDefaultHost().attach(
"/test", new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("test", MediaType.TEXT_PLAIN);
}
});
// Default matching mode
int defaultMatching = route.getMatchingMode();
// Set another matching mode
route.setMatchingMode(Template.MODE_EQUALS);
事实上,更常见的是实现Restlet应用程序并将其附加到组件上的虚拟主机。在这种情况下,您将获得完全匹配。
以下是这样做的方法:
Component component = new Component();
(...)
MyRestletApplication application = new MyRestletApplication();
component.getDefaultHost().attachDefault(application);
以下是该应用程序的示例内容:
public class MyRestletApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
TemplateRoute route = router.attach("/test", MyServerResource.class);
// Default matching mode
int defaultMatching = route.getMatchingMode();
return router;
}
}
服务器资源的内容:
public class MyServerResource extends ServerResource {
@Get
public String test() throws Exception {
return "test";
}
}
希望它可以帮到你, 亨利