Restlet URI 模式

Restlet URI Pattern

我在使用 2.1-M7 版本的 Restlet(我必须更新它,但这是另一个问题)

我直接使用Restlet,在启动组件之前没有任何网络服务器。在上面添加一些虚拟主机。

在主机中,我使用方法 attach(string uriPattern, Restlet entrypoint) 添加入口点

我的问题是: 当我添加带有入口点 Test.class 的 uri“/test”(使用打印方法:"hello world")和卷曲时,我可以调用“/testmeagain”并且它可以工作(return "hello world") 因为它是一种模式?

所以我用这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html?is-external=true

然后尝试“/test$”,但在 curl“/test”和“/testmeagain”中 return 404 现在

也许我错过了什么?

如果您有任何帮助我的建议或回复,谢谢。

其实在Restlet中,路由是有匹配模式的。这是框架中的行为:

  • 在虚拟机上附加路由时,默认模式为"STARTS WITH"。所以像 attach("/test", ...) 这样的东西,URL 像 /test/testsomething 会匹配。
  • 在路由器上附加路由时,默认模式为"EQUALS"。所以像 attach("/test", ...) 这样的东西,只有 URL /test 会匹配。

attach方法returns一个模板路由,您可以在其中更改此匹配:

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";
    }
}

希望对你有帮助, 蒂埃里