Restlet中的递归URL路由

时间:2015-10-22 20:03:16

标签: url routes restlet

我正在使用Spring来设置一个Restlet应用程序,我有一个点需要URL递归。即,

/something/filter/x/y/filter/a/b/foo

模式大约是:

/something(/filter/{p}/{q})*/foo

因此,URL中可以有无限数量的过滤器片段。

在Spring XML中,它看起来像这样:

<bean id="router" class="org.restlet.ext.spring.SpringRouter">
    <constructor-arg ref="parentRouter" />
    <property name="attachments">
        <map>
            <entry key="/filter/{filterAttribute}/{filterValue}" value-ref="filterExtractor" />
            <entry key="">
                <bean class="org.restlet.ext.spring.SpringFinder">
                    <lookup-method name="create" bean="dataResource" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

<bean id="extractor" class="ca.uhnresearch.pughlab.tracker.extractor.FilterExtractor">
    <property name="next" ref="router"/>
</bean>

所以这开始了,但是当应用程序启动时,org.restlet.util.WrapperList.iterator中的堆栈溢出,所以看起来递归路由器/提取器初始化正在打破Restlet初始化过程。

因此有两个问题:

  1. Restlet是否允许递归路由? (文档似乎没有涉及到这一点)
  2. 实现递归URL路由的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Restlet不支持这种方法。我认为实现类似事情的唯一方法是具有匹配模式startsWith的子路由器。

我不确切知道您的用例是什么,但利用HTTP标头将过滤器属性/值放入请求中会更好。我不确定这种方法是否真的是RESTful ;-)但我有兴趣了解更多细节......

希望它可以帮到你, 亨利