我正在尝试将y = (a1(2) * 3 + b2(2) * a3(2)) / avg(b1)
重定向到/boxes/{id}
(Restlet 2.3.7):
/boxes/{id}/description
除非在非根URL路径下部署到Servlet容器,否则这似乎有效。在这种情况下,Redirector redirector = new Redirector(getContext(),
"/boxes/{id}/description",
Redirector.MODE_CLIENT_SEE_OTHER);
router.attach("/boxes/{id}", redirector);
标头中省略了基本路径,因此重定向不起作用。
这本书“Restlet in Action”显示了重定向器使用绝对URI。我知道HTTP / 1.1不允许重定向到路径,但Restlet确实在Location头中为我创建了剩下的URI,但Servlet根路径部分除外。
我找到this old mailing list posting,但似乎必须有更好的方法。
答案 0 :(得分:1)
我通过创建一个新的资源来处理重定向来解决这个问题:
public class BoxesResource extends ServerResource {
public static class RedirectingResource extends ServerResource {
@Get
public Representation doGet() {
final String id = (String) this.getRequest().
getAttributes().get("id");
final Reference newRef = new Reference(
getRootRef().toString() + "/boxes/" + id + "/description");
redirectSeeOther(newRef);
return new EmptyRepresentation();
}
}
@Get
public Representation doGet() {
// ...
}
}
然后我将它附在我的应用程序的createInboundRoot()
:
router.attach("/boxes/{id}", BoxesResource.RedirectingResource.class);
router.attach("/boxes/{id}/description", BoxesResource.class);