2015-10-22 2 views
1

Я использую 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, когда начинается приложение, так это выглядит, как инициализация рекурсивный маршрутизатор/экстрактор разрывая Процессы инициализации пула.

Два вопроса, поэтому:

  1. ли Restlet позволяют рекурсивную маршрутизацию? (Документы, похоже, не касаются этого)
  2. Каков наилучший способ реализации рекурсивных маршрутов URL?

ответ

0

Такой подход не поддерживается в Restlet. Единственный способ, с помощью которого я могу реализовать такую ​​вещь, - это подмассивы с соответствующим режимом startsWith.

Я не знаю точно, что ваш вариант использования, но не лучше ли использовать заголовки HTTP для добавления атрибутов/значений фильтра в запросы. Я не уверен, что такой подход действительно RESTful ;-) но я заинтересован в том, чтобы более подробно ...

Надеется, что это помогает вам, Тьерри

+0

Это позор, потому что это разумный случай использования (IMHO) и технология HTTP-заголовка - это немного обманщик. Одним из вариантов может быть хакерский роутер + экстрактор + петлератор, который отбросит столько фрагментов фильтра, сколько возможно перед отправкой в ​​конце (по существу эквивалент эквивалента повторителя * типа типа), но я недостаточно хорош с использованием ссылки умеют петь. Другое дело - сбрасывать все в строку запроса, но затем она деконтекстуализируется из пути ресурса. Я действительно не вижу, как startWith получает меня в любом месте, так как действительно могут быть нулевые совпадения. –

Смежные вопросы