Restlet URL /路径模式错误映射

时间:2016-07-19 14:41:40

标签: java rest uri restlet url-pattern

我正在使用Restlet开发REST API。

到目前为止,一切都运转得很好。但是,我现在遇到了将Router网址映射到ServerResource的问题。

我有以下情况:

  • 获取/car返回所有汽车的列表
  • 获取/car/{id}返回ID为
  • 的汽车的详细信息
  • 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结构,因此必须保持原样。

2 个答案:

答案 0 :(得分:0)

您需要将.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出现在

之后

答案 1 :(得分:0)

我只需重新排序attach语句就可以解决这个问题:

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