【发布时间】:2015-02-04 02:34:37
【问题描述】:
This 问题很好地解释了如何在 spring 中编写下载文件控制器。 This 问题很好地解释了不能使用 response.sendRedirect() 发送 Post 请求
我希望用户被重定向到同一页面,并显示有关导致文件下载错误的错误。这是工作流程
- 用户点击 www.abc.com/index [控制器有映射 /index.jsp 并返回 ModelAndView]
- 在此页面,我们有一个文件下载,其 URL 为 www.abc.com/download?resource_id=123。 [控制器有映射/下载并返回void]
- 当文件下载出错时,应将用户重定向到 www.abc.com/index 并显示一些错误。
- 当文件下载没有错误时,用户停留在同一页面并出现文件下载对话框。
下面是一个sn-p用于转发:
@RequestMapping(/download)
public void execute(@RequestParam(value = "resource_id" required = true) final String resource, final HttpServletRequest request, final HttpServletResponse response) {
try {
//some processing
} catch {
RequestDispatcher dispatcher = request.getRequestDispatcher("/index" + "?is_downloaded=false");
dispatcher.forward(request, response)
}
}
@RequestMapping(/index)
public void execute(@RequestParam(value = "is_downloaded" required = false) final String isDownloaded, final HttpServletRequest request) {
//do stuff here
}
第 3 步是问题所在。
- 使用转发将 URL 更改为错误报告的下载 URL。
- 使用重定向作为带有隐藏参数的 response.sendRedirect() 是不可能的,根本不会修改 URL。
- 将重定向用作带有隐藏参数的 response.sendRedirect(),并在 URL 末尾引入“?is_downloaded=false”
谁能告诉这个解决方法。
【问题讨论】:
-
解决这个问题的2种方法,你不需要void作为返回值,返回ModelAndView或String会容易得多。
标签: java spring jsp spring-mvc