2015-04-10 1 views
0

Play Framework предоставляет возможность доступа к JSON-данным в теле запроса через request().body().asJson(). Использование форм-помощников не публикует данные в формате JSON.Опубликовать JSON-данные из формы PlayFramework

Итак, что является лучшим способом в игровом приложении преобразовать данные формы в json-объект до, передавая его контроллеру?

Заранее спасибо.

+0

Вам действительно нужен json в контроллере? Или будет POJO в порядке? –

+0

Я предпочитаю JSON .. –

+0

Вы просмотрели https://www.playframework.com/documentation/2.3.x/JavaJsonActions –

ответ

-1

1.Serialize форма к 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.Define запрос АЯКС с типом контента 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.Send данных после отправки формы

$(function() { 
var url = "/api/route"; 

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

Видите, это было не так сложно (что сериализация для получения JSON, хотя ...).Вы обманываете, повторяя данное решение, но который заботится до тех пор, пока вы это сделали. – sebster

+1

Я надеялся на такой ответ. Теперь я надеюсь, что это может помочь кому-то еще :) Спасибо за ваше время, хотя –

-1

При получении запроса данных полезной нагрузки можно использовать либо BodyParsers (они используют заголовок Content-Type для разбора полезной нагрузки во что-то другое), или вы можете получить полезную нагрузку самостоятельно через форму связывания или непосредственно в виде JSON IF у вас есть JSON/текстовая полезная нагрузка в органе запроса.

В вашем случае, у вас есть Content-Type: либо application/x-www-form-urlencodedИЛИmultipart/form-data. Поэтому вам нужно привязать к этой форме с помощью вспомогательного класса, чтобы получить эти данные, и если вы действительно хотите преобразовать его в JSON, вы просто добавите дополнительный шаг вставки его в ObjectNode.

Если вы хотите, чтобы ваши данные формы были как JSON, сделайте преобразование непосредственно на интерфейсе, если это возможно, и отправьте его в корпус как Content-Type application/json.

Теперь вы понимаете, почему то, что вы хотите сделать, просто добавляет дополнительную сложность без видимой выгоды?

+0

Мне очень нравятся отрицательные голоса без объяснений ... приведите их, мудрые! – sebster

+0

Я знаю это. На самом деле, это был мой вопрос. –

+0

И я давал вам аргументы, почему это не очень хорошая идея. Это все. – sebster