繁体   English   中英

Restlet URL /路径模式映射错误

[英]Restlet URL/path pattern mismapping

我正在使用Restlet开发REST API。

到目前为止,一切都很好。 但是,我现在遇到URL到ServerResourceRouter映射的问题。

我有以下情况:

  • GET /car返回所有汽车的列表
  • GET /car/{id}返回ID为1的汽车的详细信息
  • GET /car/advancedsearch?param1=test应该使用某些参数对所有汽车进行搜索

前两个调用工作正常。 如果我尝试打第三个电话,那么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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM