我有一个POJO资源,它定义了一些HTTP端点并返回Dropwizard视图。其中一些端点只是执行一个操作(例如,更新数据库),然后将用户转发到另一个端点。例如,用户位于GET /foo
位置并提交表单。这将它们定向到端点POST /foo/submit
,处理它们的提交,然后将它们转发到GET /foo/done
。例如,这可以防止在刷新页面时重新提交表单。此转发目前使用Jersey的Response.seeOther()方法完成(返回Response而不是View)。
我希望能够做的是,当处理方法处理他们的提交时,生成某种消息(错误消息,警告,成功等)并将该消息传递给我们转发的页面。例如,在GET /foo/done
,我希望它在页面顶部说,"提交完成!"或者"提交失败,因为......"。
我已经做了一些搜索,很多人都建议抛出一个WebApplicationException - 除了我的所有情况都不是错误。有时我想表明成功行动的确认。但我无法弄清楚如何让接收方法接收消息。我之前在Python中通过使用处理方法接受可选字典来完成它,但遗憾的是我在Java 7上,因此我不能使用默认值为方法提供可选参数。
感谢您的帮助。
答案 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();
}
}