其实在Restlet中,是有路由匹配模式的。这是框架中的行为:
- 在虚拟机上附加路由时,默认模式为“STARTS WITH”。因此,对于
attach("/test", ...) 之类的内容,/test 和 /testsomething 之类的 URL 将匹配。
- 在路由器上附加路由时,默认模式为“EQUALS”。因此,对于
attach("/test", ...) 之类的内容,只有 URL /test 会匹配。
attach 方法返回一个模板路由,您可以在该路由上更改此匹配:
TemplateRoute route = component.getDefaultHost().attach(
"/test", new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("test", MediaType.TEXT_PLAIN);
}
});
// Default matching mode
int defaultMatching = route.getMatchingMode();
// Set another matching mode
route.setMatchingMode(Template.MODE_EQUALS);
实际上,更常见的做法是实现一个 Restlet 应用程序并将其附加到组件上的虚拟主机上。在这种情况下,您将获得完全匹配。
方法如下:
Component component = new Component();
(...)
MyRestletApplication application = new MyRestletApplication();
component.getDefaultHost().attachDefault(application);
这是应用程序的示例内容:
public class MyRestletApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
TemplateRoute route = router.attach("/test", MyServerResource.class);
// Default matching mode
int defaultMatching = route.getMatchingMode();
return router;
}
}
以及服务器资源的内容:
public class MyServerResource extends ServerResource {
@Get
public String test() throws Exception {
return "test";
}
}
希望对你有帮助
蒂埃里