Я использую Spring, чтобы настроить приложение Restlet, и у меня есть точка, где нужны URL-адреса, чтобы быть рекурсивными. т.е.Рекурсивная маршрутизация URL-адресов в Restlet
/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 позволяют рекурсивную маршрутизацию? (Документы, похоже, не касаются этого)
- Каков наилучший способ реализации рекурсивных маршрутов URL?
Это позор, потому что это разумный случай использования (IMHO) и технология HTTP-заголовка - это немного обманщик. Одним из вариантов может быть хакерский роутер + экстрактор + петлератор, который отбросит столько фрагментов фильтра, сколько возможно перед отправкой в конце (по существу эквивалент эквивалента повторителя * типа типа), но я недостаточно хорош с использованием ссылки умеют петь. Другое дело - сбрасывать все в строку запроса, но затем она деконтекстуализируется из пути ресурса. Я действительно не вижу, как startWith получает меня в любом месте, так как действительно могут быть нулевые совпадения. –