2016-01-07 70 views

回答

0

在Restlet中配置請求的執行鏈非常靈活。

  • 要爲所有服務器資源的全局過濾器,你可以簡單地在你的路由器的前面加上你的Restlet應用程序中的過濾器:

    public class MyApplication extends Application { 
        public Restlet createInboundRoot() { 
         Router router = new Router(getContext()); 
         (...) 
         router.attach("/test", TestServerResource.class); 
         router.attach("/", RootServerResource.class); 
    
         return new MyFilter(getContext(), router); 
        } 
    } 
    

    該過濾器的內容可能是類似的東西:

    public class MyGlobalFilter extends Filter { 
        public MyGlobalFilter(Context context, Restlet next) { 
         super(context, next); 
        } 
    
        (...) 
        @Override 
        protected void afterHandle(Request request, Response response) { 
         (...) 
        } 
    
        @Override 
        protected int beforeHandle(Request request, Response response) { 
         (...) 
        } 
    } 
    
  • 關於在的Restlet前置和後置過濾器,簡單地實現分別beforeHandleafterHandle米過濾器類中的方法。

    public class MyGlobalFilter extends Filter { 
        (...) 
        @Override 
        protected void afterHandle(Request request, Response response) { 
         (...) 
        } 
    
        @Override 
        protected int beforeHandle(Request request, Response response) { 
         (...) 
        } 
    } 
    

    要應用此類過濾器,Restlet中沒有相應的註釋。在定義應用程序類的createInboundRoot方法中的執行鏈(路由)時,您需要添加它們。您可以注意到子路由器可用於僅對服務器資源的子集應用過濾器。

    public class MyApplication extends Application { 
        public Restlet createInboundRoot() { 
         Router rootRouter = new Router(getContext()); 
         (...) 
    
         Router subRouter = new Router(getContext()); 
         subRouter.attach("", TestsServerResource.class); 
         subRouter.attach("{id}", TestServerResource.class); 
    
         MyFilter myFilter = new MyFilter(getContext(), subRouter); 
         rootRouter.attach("/test", myFilter) 
           .setMatchingMode(Template.MODE_STARTS_WITH); 
    
         return rootRouter; 
        } 
    } 
    

希望它可以幫助你, 蒂埃裏