RESTful バックエンドを備えた webapp の場合、jquery の$postを使用して json をサーバーに投稿しています。驚いたことに、json はリクエスト本文ではなく、リクエストのフォーム データのパラメーター キーに詰め込まれています。他の方法を考えることはできますが、問題は、なぜ期待どおりに機能しないのかということです。
サーバーではscalatraを使用し、リクエスト情報を出力します:
println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")
今、私が正しいと思うことをする単純なカール:
curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'
プロデュース:
Request received:
{"a":"b"}
-------------
{}
==============
そして、問題を説明するための html+js のビット:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
<button type="button" onclick="doPost()">
POST
</button>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doPost() {
$.post("http://localhost:8080/x",
JSON.stringify({"a":"b"} ),
function(data) {});
}
</script>
</body>
</html>
プロデュース:
Request received:
--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
==============
したがって、文字列化された json 文字列とコールバックで $post を使用すると、すべてが 1 つのパラメーター キーに詰め込まれます。これが正常な場合、その理由と、サーバー上でこれをきれいに解明する方法を知りたいです。正常でない場合、$post を使用して応答本文で取得するにはどうすればよいか知りたいです。