【问题标题】:RESTLET - chaining a validator and filter, why does it surpasses the filter?RESTLET - 链接验证器和过滤器,为什么它会超过过滤器?
【发布时间】:2025-01-09 22:45:01
【问题描述】:

我有一个restlet,我想在其中链接一个验证器并在代码中一个接一个地过滤。代码是这样的

@Override
public synchronized Restlet createInboundRoot()
{
    Router router = new Router();
    Validator val = new ParameterValidator(getContext());

    Filter fil = new MYFilter(getContext());
    router.attach("/HelloWorld", HW.class);
    fil.setNext(val);
    val.setNext(router);
    val.validate("Name",true,"^[a-z0-9A-Z]+$");
    return val;
}

但这不会检查过滤器,只是在验证器上工作,然后出来。

但是如果我编写如下相同的代码,它可以正常工作,

@Override
public synchronized Restlet createInboundRoot()
{
    Router router = new Router();
    Validator val = new ParameterValidator(getContext());

    Filter fil = new MYFilter(getContext());
    router.attach("/HelloWorld", fil);
    fil.setNext(val);
    val.setNext(HW.class);
    val.validate("Name",true,"^[a-z0-9A-Z]+$");
    return router;
}

上面的代码工作正常,但现在如果我必须创建一个链,我将不得不为每个新映射创建 Validator 和 Filter 的新对象。 任何解决方案将不胜感激

【问题讨论】:

    标签: java servlets restlet restlet-2.0


    【解决方案1】:

    我在 RESTLET 邮件列表中找到了上述问题的答案。路由器超过过滤器的原因是它返回 val

    return val;
    

    而不是那样,如果有人使用

    return fil;
    

    然后调用将通过过滤器链通过过滤器然后验证器..

    【讨论】: