Play Framework提供了一种通过request().body().asJson()
访问请求体中JSON数据的方法。使用表单助手不会以JSON格式发布数据。
那么,在播放应用程序中,将传递给控制器之前将表单数据转换为json-object 的最佳方法是什么?
提前致谢。
答案 0 :(得分:-1)
当您检索请求有效负载数据时,您可以使用BodyParsers
(他们使用Content-Type
标头将有效负载解析为其他内容),或者您可以通过表单绑定或直接作为JSON获取有效负载 IF 您在请求正文中有JSON /文本有效负载。
在您的情况下,您有Content-Type
个application/x-www-form-urlencoded
或 multipart/form-data
。因此,您需要使用帮助程序类绑定到该表单获取该数据,如果您确实要将其转换为JSON,则只需添加一个将其插入ObjectNode的步骤。
如果您希望表单数据为JSON,请直接在前端进行转换,如果可能,请将其作为Content-Type application/json
发送到正文中。
现在,你明白为什么你想做的只是增加额外的复杂性而没有明显的收获吗?
答案 1 :(得分:-1)
1.将表单分类为JSON-Object
$.fn.serializeObject = function(){
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
2.定义内容类型为application/json
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
});
function request(path, params, method) {
method = method || "POST";
$.ajax({
url: path,
type: method,
data: params,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
//do something
},
error: function (xhr, ajaxOptions, thrownError) {
//do something
}
});
}
3.表单提交后发送数据
$(function() {
var url = "/api/route";
$('form').submit(function() {
var json = JSON.stringify($('form').serializeObject());
request(url, json);
return false;
});
});