ajax POST方法调用后@RequestBody属性为空

时间:2017-06-24 23:36:16

标签: ajax spring-mvc jackson

我正在尝试向服务器发送ajax POST请求并检索响应。 我的问题是,当我提交表单时,我的@RequestBody参数是空的。 我按照这个教程做了同样的事情。 http://www.mkyong.com/spring-mvc/spring-4-mvc-ajax-hello-world-example/

代码的相关部分: 控制器:

@JsonView(Views.Public.class)
    @RequestMapping(value = "searchEvents", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ModelAndView findEvents(HttpServletRequest request, HttpServletResponse response, @RequestBody EventFilterBean eventFilterBean) {
        ///
    }

的index.jsp

var search = {}
        search["eventName"] = $("#eventName").val();

        $.ajax({
            type : "POST",
            contentType : "application/json",
            url : "searchEvents",
            data : JSON.stringify(search),
            dataType : 'json',
            timeout : 100000
        });

在pom.xml中我添加了

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.9.0.pr3</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.0.pr3</version>
            </dependency>

我试图在谷歌上找到解决方案,但我无法做到。提前谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

根据:

    var search = {}
    search["eventName"] = $("#eventName").val();

    $.ajax({
        type : "POST",
        contentType : "application/json",
        url : "searchEvents",
        data : JSON.stringify(search),
        dataType : 'json',
        timeout : 100000
    });

您正在以String格式发送JSON,因此首先要做的是在String参数上添加@RequestBody注释。

其次,将/添加到您的路线值。

第三,如果您使用的是Ajax,则无法返回ModelAndView,您需要返回一条HTTP消息,其中包含您的响应。

像这样:

@RequestMapping(value = "/searchEvents", method = RequestMethod.POST, consumes = "application/json", produces="application/json")
    @ResponseBody
    public ResponseEntity<String> findEvents(HttpServletRequest request, HttpServletResponse response, @RequestBody String eventFilterBean) {
        ///
    }

答案 1 :(得分:0)

我安装了fiddler并且得到了$(&#34;#eventName&#34;)。val();没有给我我想要的字符串。当我改变搜索[&#34; eventName&#34;] = $(&#34;#eventName&#34;)。val();搜索[&#34; eventName&#34;] =&#34;一些硬编码字符串&#34 ;;有用。即使没有@JsonView(Views.Public.class)

也可以