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

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

我想这个方法:

  • 如果存在validation错误,则返回JSon @ResponseBody(在ajax中)
  • 如果没有validation错误,则执行到给定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; } 

任何人都可以告诉我,如果我想要实现的目标是什么?

你所描述的将会有所作为。 您的方法使用@ResponseBody注释。 因此,将调度特定的HandlerMethodReturnValueHandlerRequestResponseBodyMethodProcessor来处理返回的对象并将其写入响应。

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

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

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