Java 从PlayFramework表单发布JSON数据

Java 从PlayFramework表单发布JSON数据,java,javascript,json,playframework,playframework-2.3,Java,Javascript,Json,Playframework,Playframework 2.3,Play Framework提供了一种通过request.body.asJson访问请求正文中JSON数据的方法。使用表单帮助程序不会以JSON格式发布数据 那么,在play应用程序中,在将表单数据传递给控制器之前,将表单数据转换为json对象的最佳方式是什么 提前感谢。当您检索请求有效负载数据时,您可以使用BodyParsers,也可以使用Content-Type头将有效负载解析为其他内容,或者您可以通过表单绑定或直接作为JSON(如果请求正文中有JSON/文本有效负载)获取有效负载 在本例中

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

那么,在play应用程序中,在将表单数据传递给控制器之前,将表单数据转换为json对象的最佳方式是什么


提前感谢。

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

在本例中,您的内容类型为application/x-www-form-urlencoded或multipart/form data。因此,您需要使用一个helper类绑定到该表单以获取该数据,如果您真的想将其转换为JSON,您只需添加一个附加步骤,将其插入ObjectNode

如果希望表单数据作为JSON,请直接在前端进行转换,如果可能的话,并将其作为内容类型application/JSON发送到正文中

现在,您明白为什么您要做的只是增加额外的复杂性而没有明显的好处了吗?

1.将表单序列化为JSON对象

2.使用内容类型application/json定义AJAX请求

3.提交表格后发送数据


您真的需要控制器中的json吗?或者POJO可以吗?你看了吗?是的,但这只适用于控制器代码。我需要的是一种将JSON从客户端发送到控制器的方法,但为什么需要JSON?因为我喜欢将请求直接发送到我的REST API,它支持JSONI,就像没有解释的否定投票一样。。。让他们来吧,聪明人!我知道这一点。事实上,这是我的问题。我给了你们理由,为什么这不是一个好主意。仅此而已。另外,如果您阅读第三段,您将看到关于在将表单数据传递给控制器之前,在play应用程序中将表单数据转换为json对象的最佳方式是什么的答案?。嗯,部分原因是,它不在play应用程序中…我不是在要求反对这种方法的论点,而是要求一个解决方案。看,序列化获得JSON并不是那么难。你通过重新提供一个给定的解决方案来作弊,但谁在乎你做了多久。我希望得到这样的答案。现在我希望它能帮助其他人:谢谢你的时间
$.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;
};
$.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
    }
});
}
$(function() {
var url = "/api/route";

$('form').submit(function() {
    var json = JSON.stringify($('form').serializeObject());
    request(url, json);
    return false;
});
});