Java 来自HttpServletResponse的Spring MVC相对重定向
鉴于这种相对重定向到另一个控制器的方法:Java 来自HttpServletResponse的Spring MVC相对重定向,java,spring,spring-mvc,Java,Spring,Spring Mvc,鉴于这种相对重定向到另一个控制器的方法: @Controller @RequestMapping("/someController") public class MyController { @RequestMapping("/redirme") public String processForm(ModelMap model) { return "redirect:/someController/somePage"; } } 如
@Controller
@RequestMapping("/someController")
public class MyController {
@RequestMapping("/redirme")
public String processForm(ModelMap model) {
return "redirect:/someController/somePage";
}
}
如果我在一个拦截器中,我如何模拟相同的相对重定向
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
response.sendRedirect("/someController/somePage");
return false;
}
}
现在使用拦截器,当我真的想在application.com/deployment/someController/somePage时,我将在application.com/someController/somePage结束。肯定有一个“spring”解决方案吗?在参考、查看UrlBasedViewResolver的源代码以及gotuskar的评论之后,我觉得很傻,因为我不知道这会起作用,也没有一个解决方案:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
StringBuilder targetUrl = new StringBuilder();
if (this.redirectURL.startsWith("/")) {
// Do not apply context path to relative URLs.
targetUrl.append(request.getContextPath());
}
targetUrl.append(this.redirectURL);
if(logger.isDebugEnabled()) {
logger.debug("Redirecting to: " + targetUrl.toString());
}
response.sendRedirect(targetUrl.toString());
return false;
}
}
将我的评论转换为答案-
尝试使用
response.sendRedirect(request.getContextPath()+uri)
根据最近问题的答案的建议,您可以使用ServletUriComponentsBuilder
是否尝试response.sendRedirect(request.getContextPath()+uri)代码>?感谢您的支持。但为什么我用这种方式将用户重定向到同一页面时,model.addAttribute(“error”,“error”)不起作用?我无法在重定向页面中显示它。。您对此有什么想法吗?servlet容器仍然会将其转换为绝对重定向