2015-02-10 25 views
0

以下是我需要修復的篩選器代碼。過濾器後面的想法是,如果找到一些查詢字符串。處理它,不需要返回或處理鏈或類似的東西。然而,當沒有找到查詢字符串時,原始請求應該被服務,例如,獲取/放入/更新/刪除請求。使用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; 
    } 

這裏的問題是,我不能完全確定返回何處停止,跳在此代碼CONTINUE才達到我需要什麼。

回答

1
  • CONTINUE:表示請求處理應該正常繼續。
  • STOP:表示請求處理應該停止並返回來自過濾器的當前響應。
  • SKIP:表示在beforeHandle(Request,Response)方法之後,請求處理應跳過doHandle(Request,Response)方法以繼續執行afterHandle(Request,Response)方法。 doHandle方法通過將它分發到下一個Restlet來處理該呼叫。

你可以在Javadoc中找到所需要的解釋: http://restlet.com/technical-resources/restlet-framework/javadocs/2.3/jse/api/org/restlet/routing/Filter.html

我希望這會幫助你。

+0

如何才能實現請求將正常進行,就像沒有基於上述if-else語句的過濾器一樣?繼續應該是if語句中的回報? – xybrek 2015-02-11 08:22:40

+0

是的,我認爲是。 「continue」通知過濾器讓請求按正常方式處理。 – 2015-03-07 14:24:49

+0

我還注意到,您可以通過調用request.getResourceRef()。getQuery()來訪問查詢,而不是查找HttpServletRequest。 – 2015-03-07 14:27:13