以下示例尝试使用两种不同的方法为嵌套资源执行路径组合。第一个使用ClientResource.getChild()
,第二个使用原始ClientResource的引用创建一个新的Reference
,然后在为该路径构造新的ClientResource之前添加两个段。
public static void main( String [] args ) {
// I would expect that this:
ClientResource res1 = new ClientResource( "http://localhost" );
ClientResource res2 = res1.getChild( "foo" );
ClientResource res3 = res2.getChild( "bar" );
System.out.printf( "res3 points to %s\n", res3.getReference().getTargetRef().toString() );
// Would be the same as this:
Reference ref = new Reference( res1.getReference() );
ref.addSegment( "foo" ).addSegment( "bar" );
ClientResource res4 = new ClientResource( ref );
System.out.printf( "res4 points to %s\n", res4.getReference().getTargetRef().toString() );
}
这是输出:
res3 points to http://localhost/bar
res4 points to http://localhost/foo/bar
有趣的是,如果我在创建res2(res1.getChild( "foo/" );
)时包含/,我会得到我期望的结果。但是,如果我第一次派生资源foo,后来想要派生它的子资源栏,这对我没有帮助。
这是一个错误,还是有这个行为的目的?
注意:我正在使用Restlet 2.3.0
编辑:这对我来说非常令人沮丧,因为getChild
的出现是我选择Restlet而不是泽西岛的原因之一。在这个明显的bug和Restlet暗示的资源路径约定之间,我相信我将在未来的项目中使用Jersey。