【问题标题】:Spring MVC: Redirect in @ResponseBodySpring MVC:@ResponseBody 中的重定向
【发布时间】:2016-08-18 19:35:38
【问题描述】:

我想在 spring mvc 方法中重定向到另一个 .jsp。我不想使用 javascripts 方法,例如:window.location.replace(url)。

我的方法:

@RequestMapping(value= "loginUser", method=RequestMethod.POST)
public @ResponseBody String loginUser (@RequestParam("name") String name,   @RequestParam("password") String password){ 

   return "";
}

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    当您的请求需要 json 响应时,您无法从 Spring 进行重定向。您可以设置重定向参数,这样当您进入成功块时,您可以使用window.location.reload(); 来检查要重定向的参数。例如,从类似的帖子中,检查此答案,

    Redirect on Ajax Jquery Call

    一个想法是让浏览器知道它应该重定向 将重定向变量添加到结果对象并检查 它在 JQuery 中

    $(document).ready(function(){ 
        jQuery.ajax({ 
            type: "GET", 
            url: "populateData.htm", 
            dataType:"json", 
            data:"userId=SampleUser", 
            success:function(response){ 
                if (response.redirect) {
                    window.location.href = response.redirect;
                }
                else {
                    // Process the expected results...
                }
            }, 
         error: function(xhr, textStatus, errorThrown) { 
                alert('Error!  Status = ' + xhr.status); 
             } 
    
        }); 
    });
    

    您也可以为重定向添加响应标头,例如 response.setHeader("REQUIRES_AUTH", "1") 和 jQuery 成功,

    success:function(response){ 
            if (response.getResponseHeader('REQUIRES_AUTH') === '1'){ 
                window.location.href = 'login.htm'; 
            }
            else {
                // Process the expected results...
            }
        }
    

    参考类似问题:Spring Controller redirect to another page

    【讨论】:

    • @OrangeDog 似乎也不起作用。由于 spring 不会重定向到 json 请求的另一个页面。更新了替代解决方案。
    • 谁说这是异步请求?
    • 我假设 OP 正在使用 ajax 调用来登录用户并重定向到某个成功页面。无论如何,无论他是否使用ajax,都只能按照其他帖子的建议使用JS。
    【解决方案2】:

    包含HttpServletResponse 参数并调用sendRedirect(String)

    或者,根本不要使用@ResponseBody,并返回您要使用的模型/视图。

    【讨论】:

    • @Responsebody 在我的情况下是必不可少的,我包含了一个 HttpServletResponse 并调用了 sendRedirect(String) 但它不起作用。 :(
    • 你确定它是必不可少的吗?当这个调用没有重定向时你会返回什么?
    • else { response.sendRedirect(TApi.Navigation.ANOTHER_JSP); } response.sendRedirect(TApi.Navigation.GET_APP_PAGE);
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2013-06-21
    相关资源
    最近更新 更多