2016-04-25 693 views
2

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

我的方法:

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

    return ""; 
} 

回答

2

当您的请求需要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

+0

如果使用了@ @ ResponseBody,那么这个工作是否可行? – OrangeDog

+0

@OrangeDog似乎也不能工作。重定向到json请求上的另一个页面更新替代解决方案 – Lucky

+0

谁说这是一个异步请求 – OrangeDog

1

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

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

+0

是@ResponseBody在我的情况下必不可少的,包括我的HttpServletResponse的,并呼吁的sendRedirect(字符串),并忽略了最低的工作。 :( –

+0

你确定这很重要吗?当这个电话没有重定向时,你会返回什么? – OrangeDog