从PlayFramework表单发布JSON数据

时间:2015-04-10 15:40:30

标签: java javascript json playframework playframework-2.3

Play Framework提供了一种通过request().body().asJson()访问请求体中JSON数据的方法。使用表单助手不会以JSON格式发布数据。

那么,在播放应用程序中,将传递给控制器​​之前将表单数据转换为json-object 的最佳方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:-1)

当您检索请求有效负载数据时,您可以使用BodyParsers(他们使用Content-Type标头将有效负载解析为其他内容),或者您可以通过表单绑定或直接作为JSON获取有效负载 IF 您在请求正文中有JSON /文本有效负载。

在您的情况下,您有Content-Typeapplication/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

的AJAX请求
$.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;
});
});