![](/img/trans.png)
[英]How to attach a restlet to a partiular URL path scheme (HTTP or HTTPS)?
[英]Restlet URL/path pattern mismapping
我正在使用Restlet开发REST API。
到目前为止,一切都很好。 但是,我现在遇到URL到ServerResource
的Router
映射的问题。
我有以下情况:
/car
返回所有汽车的列表 /car/{id}
返回ID为1的汽车的详细信息 /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.