jquery - 从 ajax Spring MVC Controller 方法执行正常重定向

标签 jquery ajax angularjs spring-mvc redirect

我有一个 Spring MVC Controller 方法。

我希望这个方法能够:

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

假设我有一个名为 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 进行注释。因此,将分派(dispatch)特定的 HandlerMethodReturnValueHandlerRequestResponseBodyMethodProcessor 来处理返回的对象并将其写入响应。

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

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

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

关于jquery - 从 ajax Spring MVC Controller 方法执行正常重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346430/

相关文章:

jquery - 我试图在前面添加一个 div 并使用 AJAX 加载其中的内容,但 div 仍然为空

javascript - 从 JQuery 中动态创建的数据获取点击事件

angularjs - 如何将 Angular 2 与 NetBeans 一起使用?

jquery - Bootstrap 弹出窗口 : reload content with ajax

javascript - 通过串行 AmCharts 中的 `dataLoader` 加载数据不会呈现图表

javascript - ajax返回成功后, toastr 不出现

html - AngularJS,列表增长时如何显示滚动条

javascript - 根据其中的 ID 删除 ArrayOfObjects

javascript - 是否可以通过 Laravel Controller 将 JQuery datepicker 对象传递到数据库中?

jquery - 单击事件未触发 - AJAX jQuery