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



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

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

我已经做了一些搜索,很多人建议抛出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();
}
}

最新更新