Restlet URL/path 模式错误映射

Restlet URL/path pattern mismapping

我正在使用 Restlet 开发 REST API。

到目前为止一切正常。但是,我现在遇到了 URL 到 ServerResourceRouter 映射的问题。

我遇到了以下情况:

前两个调用没有任何问题。如果我尝试点击第三个调用,Restlet Router 会以某种方式将它映射到第二个调用。我怎样才能告诉 Restlet 使用第三种情况?

我的映射定义如下:

router.attach("/car",                CarListResource.class);
router.attach("/car/{id}",           CarResource.class);
router.attach("/car/advancedsearch", CarSearchResource.class);

CarSearchResource 从未被调用,而是请求以 CarResource.

结束

路由器的默认匹配模式设置为Template.MODE_EQUALS,因此不会导致它。

有人对我如何修复它有任何进一步的建议吗?


请不要建议将 /car 与参数一起使用,因为在该级别上已经有另一种搜索。此外,我无法控制 API 结构,因此它必须保持原样。

您需要将 .setMatchingQuery(true); 添加到该路由,以便它识别它的末尾有一个查询。

    Router router = (Router) super.createInboundRoot();
    TemplateRoute route1 = router.attach("/car/advancedsearch?{query_params}", MyResource.class);
    route1.setMatchingQuery(true);
    return router;

请注意,此模式与您在路线中确定的确切特定顺序一致,即 advancedsearch 在前,query_params

之后

我可以通过简单地重新排序 attach 语句来解决这个问题:

router.attach("/car/advancedsearch", CarSearchResource.class);
router.attach("/car",                CarListResource.class);
router.attach("/car/{id}",           CarResource.class);