使用 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());
}
在上面的代码中,它将 Resource 视为relative,因此将请求的资源从更改/hello
为完整的 url。我在这里遗漏了一些明显的东西,但我完全被难住了。