Для веб-приложения с бэкэндом RESTful я отправляю некоторые json на сервер, используя $ post jquery.Теперь, к моему удивлению, json вставляется в ключ параметра для данных формы запроса, а не в тело запроса.Я могу подумать о некоторых других способах сделать это , но вопрос в том, почему это не работает так, как я ожидаю.
На сервере я использую скалатру и печатаю некоторую информацию запроса:
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}
==============
Так что, если я использую $ post со строковой строкой json и обратным вызовом, я получаю все содержимое в одном ключе параметра.Если это нормально, я хотел бы знать, почему и как я должен распутать это на сервере.Если это не нормально, я хотел бы знать, что мне нужно сделать, чтобы получить его в теле ответа с помощью $ post.
ОБНОВЛЕНИЕ: теперь есть запрос для jquery для поддержки contentTypeна $ .пост