如何使用 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();
}
}
我有一个 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();
}
}