我已经在SO中解决了有关此主题的大部分问题,但无法解决此问题。
我的问题是,无论何时我在下面的控制器方法中使用@RequestBody注释,ajax调用都不会调用此方法但是如果我删除了@RequestBody注释,则控件会出现在方法中,但是联系对象的值为null:为什么序列化表单没有绑定到对象? 并收到错误:客户端发送的请求在语法上不正确
控制器:
@RequestMapping(value="/addContacts.htm", method = RequestMethod.POST, headers = {"content-type=application/json"})
@ResponseBody
public String addContacts(@RequestBody Contact contact, HttpServletRequest request ) {
return "success";
}
ajax电话:
$("#add_more_contact").click(function(){
var formJson = $("#addContactForm").serialize();
$.ajax( {
url : "/myproject/admin/addContacts.htm",
type : "POST",
data : formJson,
dataType : "text",
contentType : "application/json",
success : function(data) {
alert('Success - '+data);
},
error : function(xhr, desc, err) {
alert("Desc: " + desc + "\nErr:" + err);
}
});
});
在ajax请求中POST数据:这4个变量存在于我的Contact对象中。
firstName=bill&lastName=gates&email=&mobileNumber=
项目servlet.xml中:
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
<mvc:annotation-driven/>
使用jackson jar:jackson-all-1.9.9.jar
不确定我错过了什么?任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
您将序列化为表单数据而不是json ...构建表单数据的匿名映射并传递
答案 1 :(得分:0)
当客户端没有发送语法正确的实体时,HTTP 400 Bad Request
(客户端发送的请求在语法上不正确)会发生错误。
在这种情况下,请求体应该是一个有效的json,但事实并非如此。正如@Dave所提到的,您的请求不包含JSON,而是包含urlencoded字符串,例如name=stack&value=overflow
。相反,它应该是JSON,例如{"name":"stack", "value":"overflow"}
。
要实现这一目标,请参阅另一个好主题:Convert form data to JavaScript object with jQuery。
您的代码的可能修复:
$("#add_more_contact").click(function(){
var formJson = $("#addContactForm").serializeToObject(); // use plugin, or build by yourself
// this variable should be a javascript object,
// such as {"name":"stack", "value":"overflow"}
$.ajax( {
url : "/myproject/admin/addContacts.htm",
type : "POST",
data : JSON.stringify(formJson), // serialize javascript object to JSON 'string'
dataType : "json", // 'text' -> 'json'
contentType : "application/json", // this can be omitted
success : ...,
error : ...,
});
});