Restlet - 重定向到资源

时间:2016-03-29 01:17:10

标签: restlet

我正在尝试将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,但似乎必须有更好的方法。

1 个答案:

答案 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);