我正在尝试向服务器发送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>
我试图在谷歌上找到解决方案,但我无法做到。提前谢谢你的帮助。
答案 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)
也可以