如何重定向用户并使用Jersey和Dropwizard将消息传递到目标页面?

时间:2015-04-22 23:16:05

标签: java rest http jersey dropwizard

我有一个POJO资源,它定义了一些HTTP端点并返回Dropwizard视图。其中一些端点只是执行一个操作(例如,更新数据库),然后将用户转发到另一个端点。例如,用户位于GET /foo位置并提交表单。这将它们定向到端点POST /foo/submit,处理它们的提交,然后将它们转发到GET /foo/done。例如,这可以防止在刷新页面时重新提交表单。此转发目前使用Jersey的Response.seeOther()方法完成(返回Response而不是View)。

我希望能够做的是,当处理方法处理他们的提交时,生成某种消息(错误消息,警告,成功等)并将该消息传递给我们转发的页面。例如,在GET /foo/done,我希望它在页面顶部说,"提交完成!"或者"提交失败,因为......"。

我已经做了一些搜索,很多人都建议抛出一个WebApplicationException - 除了我的所有情况都不是错误。有时我想表明成功行动的确认。但我无法弄清楚如何让接收方法接收消息。我之前在Python中通过使用处理方法接受可选字典来完成它,但遗憾的是我在Java 7上,因此我不能使用默认值为方法提供可选参数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

重定向只会发送GET请求。 GET请求不应该有任何正文。要使用GET请求发送任意数据,只需将其发送到查询字符串中(当然这里不应该有机密信息)。例如

@Path("foo")
public class FooResource {

    @GET
    @Path("done")
    public String getDone(@QueryParam("message") String message) {
        return message;
    }

    @POST
    @Path("submit")
    public Response postData() {
        String message = UriComponent.encode(
                "You have perefected submitting!", 
                UriComponent.Type.QUERY_PARAM_SPACE_ENCODED);
        return Response.seeOther(URI.create("/api/foo/done?message=" + message)).build();
    }
}