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

How to redirect user and pass a message to the destination page with Jersey and Dropwizard?

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

我希望能够做的是,当处理方法处理他们的提交时,生成某种消息(错误消息、警告、成功等)并将该消息传递给我们转发到的页面。例如,在 GET /foo/done,我希望它在页面顶部显示 "Submission complete!" 或 "Submission failed because..."。

我进行了一些搜索,很多人都建议抛出 WebApplicationException - 但并非我的所有情况都是错误。有时我只想显示对成功操作的确认。但是我不知道如何获取接收消息的接收方法。我之前在 Python 中通过让处理方法接受可选字典来完成此操作,但不幸的是我在 Java 7 上,所以我无法为方法提供具有默认值的可选参数。

感谢您的帮助。

重定向只会发送 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();
    }
}