【问题标题】:Spring Controller + Ajax return StringSpring Controller + Ajax 返回字符串
【发布时间】:2014-01-06 09:36:06
【问题描述】:

我想将字符串从Spring MVC Controller 返回到Ajax。 它没有按预期工作并给出错误。

我的 Ajax 代码:

function ajaxRequest(item) {

    $.ajax({
        type: "POST",
        url: "/myPage",
        data: {
           item: item
        },
        success: function (html) {

            alert(html);
        },
        error: function(e) {
            console.log("Error:" + e);
        }
    });

}

我的控制器:

@RequestMapping(value = "/myPage", method= RequestMethod.POST, produces="text/plain")
public @ResponseBody String myController(HttpServletRequest request) {
String myItem = request.getParameter("item");   

...

return myItem + "bla bla bla";
}

Chrome 控制台结果:

POST http://localhost:8080/myPage 406 (Not Acceptable) jquery.js
Error:[object XMLHttpRequest] 

我在这里错过了什么?

【问题讨论】:

    标签: ajax spring model-view-controller controller


    【解决方案1】:

    当您从使用 @ResponseBody 注释的处理程序方法返回 String 时,Spring 将使用 StringHttpMessageConverter 将返回内容类型设置为 text/plain。但是,您的请求没有该内容类型的 Accept 标头,因此服务器(您的 Spring 应用程序)认为返回 text/plain 是不可接受的。

    更改您的 ajax,为 text/plain 添加 Accept 标头。

    【讨论】:

      【解决方案2】:

      我已经解决了。我们可以使用响应编写器返回正确的值。

          @RequestMapping(value = "/myPage")
          public void myController(HttpServletRequest request, HttpServletResponse response) throws IOException {
      
          String myItem = request.getParameter("item");   
      
          ...
      
          response.getWriter().println(myItem + "bla bla bla");
          }
      

      【讨论】:

        【解决方案3】:

        确保您有 Jackson 依赖项。 Spring MVC 可以依赖它。

        【讨论】:

        • 这里不涉及杰克逊。
        猜你喜欢
        • 1970-01-01
        • 2015-09-02
        • 2020-08-13
        • 2020-10-27
        • 2019-03-23
        • 1970-01-01
        • 2015-07-24
        • 2014-07-31
        • 2012-06-01
        相关资源
        最近更新 更多