从ajax Spring MVC控制器方法执行正常重定向

bal*_*teo 3 ajax jquery redirect spring-mvc angularjs

我有一个Spring MVC控制器方法.

我想这个方法:

  • 如果存在验证错误,则返回JSon @ResponseBody(在ajax中)
  • 如果没有验证错误,则执行到给定URL的正常重定向

假设我有一个名为myObject的javabean对象,我尝试了以下方法:

@RequestMapping(value = "/new", method = RequestMethod.POST)
@ResponseBody
public MyJavabeanObject myMethod(@RequestBody MyJavabeanObject myObject, BindingResult bindingResult, Model model,
        RedirectAttributes redirectAttributes, HttpServletResponse response) throws IOException {

    if (bindingResult.hasErrors()) {
        //adding error message to javabean
        return myObject;
    }

    response.sendRedirect("/success");
    return null;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我,如果我想要达到的目标是可能的吗?

Sot*_*lis 14

你所描述的将会有所作为.您的方法使用注释@ResponseBody.因为具体的HandlerMethodReturnValueHandler,RequestResponseBodyMethodProcessor将调度处理返回的对象并将其写入响应.

如果您没有收到错误,请直接发送重定向并返回null.当处理程序方法的返回值为null,Spring DispatcherServlet假定您自己处理生成响应.

您唯一需要担心的是您的AJAX处理程序如何期望响应.在一种情况下,它将获得JSON,在另一种情况下,它将获得任何/success回报.

注意:如果您希望重定向从AJAX请求重定向整个浏览器页面,则这将不起作用.您需要的是在AJAX处理程序中有一个特殊情况,它将通过设置window.location或相关的东西来执行浏览器页面更改.

  • @balteo首先,我不会使用Spring的`redirect`来实现它(除非JQuery或Angular有办法处理它).而是返回一个特殊值.检查javascript中的值,然后将`window.location`设置为新的URL. (2认同)