Restlet URI模式

时间:2015-10-09 09:05:33

标签: java rest pattern-matching uri restlet

我在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

也许我错过了什么?

如果您有任何建议或回应来帮助我,请感谢您。

1 个答案:

答案 0 :(得分:1)

事实上,在Restlet中,路由有匹配模式。以下是框架中的行为:

  • 在虚拟机上附加路线时,默认模式为" STARTS WITH"。因此,使用attach("/test", ...)之类的内容,/test/testsomething等网址将匹配。
  • 在路由器上附加路由时,默认模式为" EQUALS"。因此,使用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";
    }
}

希望它可以帮到你, 亨利