【发布时间】:2014-03-11 10:34:58
【问题描述】:
我在 restlet 中遇到了一个奇怪的路由问题。我用的是安卓。
本课extends Router
这是我的路由代码:
this.attach("/contacts", contactListRestlet); // To list all contacts
this.attach("/contacts/{uid}", contactRestlet); // To show details about a specific contact
this.attach("/contacts/similar", similarRestlet, Template.MODE_EQUALS);
this.attach("/contact/photo/{uid}", photoRestlet); // {uid} must correspond to a valid raw contact id
this.attach("/contact/photo/{uid}/thumbnail", photoThumbnailRestlet);
this.attach("/import/file", fileImportRestlet);
this.attach("/echo", echoRestlet);
this.attach("/echo/file", echoFileRestlet);
this.attach("/import/vcard", importVcard);
this.attach("/logout", logoutRestlet);
final String ROOT_URI = "file:///android_asset";
Application application = new Application() {
@Override
public Restlet createInboundRoot() {
//ForAssets
DirectoryForAssets d = new DirectoryForAssets(getContext(), ROOT_URI);
d.setTargetClass(DirectoryResourceExtension.class);
d.setAndroidContext(context);
return d;
}
};
this.attach("/editor", application, Template.MODE_STARTS_WITH);
这样,如果我点击ip:port/contacts/similar,我总是会被重定向到/contacts restlet (contactRestlet),而不是我所期望的/contacts/similar restlet (similarRestlet)。
但是如果我把它改成:
this.attach("/contacts/similar", similarRestlet);
this.attach("/contacts", contactListRestlet); // To list all contacts
this.attach("/contacts/{uid}", contactRestlet); // To show details about a specific contact
this.attach("/contact/photo/{uid}", photoRestlet); // {uid} must correspond to a valid raw contact id
this.attach("/contact/photo/{uid}/thumbnail", photoThumbnailRestlet);
this.attach("/import/file", fileImportRestlet);
this.attach("/echo", echoRestlet);
this.attach("/echo/file", echoFileRestlet);
this.attach("/import/vcard", importVcard);
this.attach("/logout", logoutRestlet);
final String ROOT_URI = "file:///android_asset";
Application application = new Application() {
@Override
public Restlet createInboundRoot() {
//ForAssets
DirectoryForAssets d = new DirectoryForAssets(getContext(), ROOT_URI);
d.setTargetClass(DirectoryResourceExtension.class);
d.setAndroidContext(context);
return d;
}
};
this.attach("/editor", application, Template.MODE_STARTS_WITH);
确实有效! (唯一的区别是similarRestlet比contactRestlet先出现)。
谁能解释我为什么会出现这种行为?我做错了什么?
【问题讨论】:
标签: restlet restlet-2.0