2015-02-10 3 views
0

Вот мой код фильтра, который мне нужно исправить. Идея фильтра заключается в том, что если найдена некоторая строка запроса. Обработайте его, не нужно возвращать или обрабатывать цепочку или что-то в этом роде. Однако, когда строка запроса не найдена, исходный запрос должен обслуживаться, например. get/put/update/delete.Правильный способ делать фильтрацию с помощью Restlet

@Override 
    protected int doHandle(Request request, Response response) { 
     HttpServletRequest servletRequest = ServletUtils.getRequest(request); 
     HttpServletResponse servletResponse = ServletUtils.getResponse(response); 
     String query = servletRequest.getQueryString(); 
     LOG.info("Query=" + query); 
     if(query != null && query.contains(ESCAPED_FRAGMENT_FORMAT1)){ 
      // TODO: return a HTML String, no need to go down the chain. 
      return STOP; 
     } else { 
      // TODO: need to execute the original request 
      return SKIP; 
     } 
     return CONTINUE; 
    } 

Проблема здесь в том, что я не совсем уверен, куда возвращать СТОП, SKIP и ПРОДОЛЖИТЬ в этом коде для того чтобы достигнуть того, что мне нужно.

ответ

1
  • CONTINUE: указывает, что обработка запроса должна продолжаться в обычном режиме.
  • STOP: указывает, что обработка запроса должна прекратиться и вернуть текущий ответ от фильтра.
  • SKIP: указывает, что после метода beforeHandle (Request, Response) обработка запроса должна пропустить метод doHandle (Request, Response), чтобы продолжить метод afterHandle (Request, Response). Метод doHandle Обрабатывает вызов, распространяя его на следующий Restlet.

Вы можете найти необходимые объяснения в Javadocs: http://restlet.com/technical-resources/restlet-framework/javadocs/2.3/jse/api/org/restlet/routing/Filter.html

Я надеюсь, что это поможет.

+0

Как я могу добиться того, что запрос будет действовать нормально, как если бы фильтр не был основан на вышеприведенном выражении if-else? CONTINUE должно быть возвратом в выражении if? – xybrek

+0

да, думаю. «continue» сообщает фильтру, что запрос обрабатывается как обычно. –

+0

Я также замечаю, что вы можете получить доступ к запросу, вызвав request.getResourceRef(). GetQuery() вместо поиска HttpServletRequest. –

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