我工作在2.1-M7版本的Restlet (我必须更新它,但这是另一个问题)
我直接使用Restlet,在启动组件之前没有任何any服务器。在上面添加一些虚拟主机。
在主机中,我使用方法附加(string uriPattern,Restlet )添加入口点。
我的问题是:当我用entrypoint Test.class添加uri "/test“(使用打印"hello world”的方法)时,我可以称之为"/testmeagain“,这是工作(返回"hello world"),因为它是一个模式?
所以我用这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true
然后试试"/test$“,但是在卷曲中,"/test”和"/testmeagain“现在返回404
也许我错过了什么?
如果你有任何建议或回应来帮助我,谢谢你。
发布于 2015-10-09 09:24:34
事实上,在Restlet,有一个路线的匹配模式。以下是框架中的行为:
attach("/test", ...)这样的东西,像/test和/testsomething这样的URL就会匹配。attach("/test", ...)的内容,只有URL /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";
}
}希望它能帮到你,蒂埃里
https://stackoverflow.com/questions/33034196
复制相似问题