4

我有一个 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;
}

任何人都可以让我知道我想要实现的目标是否可能?

4

1 回答 1

14

您所拥有的将按照您的描述发挥作用。您的方法用@ResponseBody. 因此,将调度一个特定的HandlerMethodReturnValueHandler,RequestResponseBodyMethodProcessor来处理返回的对象并将其写入响应。

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

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

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

于 2013-10-13T15:10:02.957 回答