下面是我的代码(客户端),通过JQUERY Ajax调用
以JSON格式发送表单数据$(document).ready(function(){
var contextroot = "/services/"
$("#customerForm").submit(function(e){
e.preventDefault();
var form = $(this);
var action = form.attr("action");
var data = form.serializeArray();
$.ajax({
url: contextroot+action,
dataType: 'json',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(data),
success: function(data){
console.log("DATA POSTED SUCCESSFULLY"+data);
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
});
});
});
以下是接受JSON数据的SPRING控制器(服务)
@RequestMapping(value="/customer/create", method = RequestMethod.POST)
public CustomerDTO create(@RequestBody CustomerDTO customerDTO) {
return customerService.create(customerDTO);
}
在提交表单时,我收到以下错误 HTTP400:BAD REQUEST - 由于语法无效,服务器无法处理该请求。
我猜这个错误是因为表单数据被序列化为JSON对象的数组,而不仅仅是请求体中的JSON对象,如下所示
[{ “名称”: “名字”, “值”: “约翰”},{ “名称”: “姓氏”, “值”: “米勒”},{ “名称”:“电子邮件”, “值”: “John@gmail.com”},{ “名称”: “移动”, “值”: “99868377”}]
但是,服务仅接受以下JSON数据
的 {
“firstName”:“约翰”,
“lastName”:“米勒”,
“email”:“John.kp @ gmail.com”,
“mobile”:“99868377”
}
如何将表单数据转换为单个 JSON对象而不是 JSON对象数组。
答案 0 :(得分:8)
我终于找到了解决方案。我编写了一个生成JSON对象的实用程序方法
$(document).ready(function(){
var contextroot = "/services/"
$("#customerForm").submit(function(e){
e.preventDefault();
var form = $(this);
var action = form.attr("action");
var data = form.serializeArray();
$.ajax({
url: contextroot+action,
dataType: 'json',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(getFormData(data)),
success: function(data){
console.log("DATA POSTED SUCCESSFULLY"+data);
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
});
});
});
//utility function
function getFormData(data) {
var unindexed_array = data;
var indexed_array = {};
$.map(unindexed_array, function(n, i) {
indexed_array[n['name']] = n['value'];
});
return indexed_array;
}