我有一个restlet,我在其中应用各种资源的映射,所有资源都应该通过一个公共过滤器,但是如果过滤条件匹配,即返回值为“CONTINUE
”,则所有过滤器重定向到不同的资源。
public synchronized Restlet createInboundRoot()
{
System.out.println("Called Application ");
Router router = new Router();
Filter fil1 = filterObj();
router.attach("/helloworld",fil);
fil.setNext(HelloWorldResource.class);
router.attach("/hello",fil);
fil.setNext(HelloWorldResource1.class);
return router;
}
但这里发生的是,在执行结束时,过滤重定向到setNext()
提到/使用的最后一个资源,在这种情况下为HelloWorldResource1
,即使
http://localhost:8600/API/TRIAL/helloworld
被调用,它将其重定向到HelloworldResource1.class
。
如果我为每个映射创建一个不同的过滤器对象并将其用于重定向,则会解决此问题,但我不确定它是否是最佳方法。有人可以指导我以最有效和最正确的方式来实现结果吗?
答案 0 :(得分:2)
在Restlet中,路由是链式的。您需要使用过滤器构建一个链,然后路由器。像这样:filter-> router->(resource1 | resource2)
使用你的例子,它会像:
public synchronized Restlet createInboundRoot()
{
Router router = new Router();
router.attach("/helloworld",HelloWorldResource.class);
router.attach("/hello",HelloWorldResource1.class);
Filter fil1 = filterObj();
fil1.setNext(router);
return fil1;
}
请注意,Filter
是一个Restlet
(它扩展为Restlet
)。见http://restlet.org/learn/javadocs/2.1/jse/api/org/restlet/routing/Filter.html