5

別のコントローラーへの相対リダイレクトのこの方法論を考えると:

@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 に行き着きます。確かにこれには「春」の解決策が必要ですか?

4

3 に答える 3

14

コメントを回答に変換する -

使ってみてresponse.sendRedirect(request.getContextPath() + uri);

于 2012-10-19T20:54:58.083 に答える
1

リダイレクトのドキュメントを参照し、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;
    }
}
于 2012-10-19T20:36:27.777 に答える
0

最近の質問Context path with url-pattern redirect in springへの回答で推奨されているように、使用できますServletUriComponentsBuilder

于 2016-04-09T21:23:50.500 に答える