【问题标题】:Restlet URI PatternRestlet URI 模式
【发布时间】:2015-10-09 09:05:33
【问题描述】:

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

我直接使用Restlet,在它之前没有任何webserver 启动一个组件。在上面添加一些虚拟主机。

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

我的问题是: 当我添加带有入口点Test.class的uri“/test”(使用打印方法:“hello world”)和curl时,我可以调用“/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

也许我错过了什么?

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

【问题讨论】:

    标签: java rest pattern-matching uri restlet


    【解决方案1】:

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

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

    希望对你有帮助 蒂埃里

    【讨论】:

    • 谢谢蒂埃里,我继续努力。尝试在不等待应用程序的情况下设置匹配模式。祝你有美好的一天
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2016-11-22
    • 2012-10-19
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多