用的Restlet 2.1.0,Java SE的版本原型,我有麻烦映射ServerResource类的URL。 我试着用Router.attach方法不少变化,但没有奏效。
我当前的代码如下所示:
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
final Router router = new Router();
router.attach("/hello", FirstServerResource.class);
router.attach("/json", Json.class);
Application myApp = new Application() {
@Override
public org.restlet.Restlet createInboundRoot() {
router.setContext(getContext());
return router;
};
};
new Server(Protocol.HTTP, 8182, myApp).start();
}
当我浏览到http://localhost:8182/hello
它不会做正确的模板匹配。 通过源代码调试,我看到的情况是,该匹配逻辑看到所请求的资源为http://localhost:8182/hello
,而不仅仅是/hello
。 该代码的Restlet哪里发生这种情况是在这里:
// HttpInboundRequest.java
// Set the resource reference
if (resourceUri != null) {
setResourceRef(new Reference(getHostRef(), resourceUri));
if (getResourceRef().isRelative()) {
// Take care of the "/" between the host part and the segments.
if (!resourceUri.startsWith("/")) {
setResourceRef(new Reference(getHostRef().toString() + "/"
+ resourceUri));
} else {
setResourceRef(new Reference(getHostRef().toString()
+ resourceUri));
}
}
setOriginalRef(getResourceRef().getTargetRef());
}
在上面的代码,它看到的资源为相对 ,因此改变从所请求的资源/hello
完整网址。 我缺少明显的东西在这里,但我完全难倒。