使用CURL的JSON响应无效

使用CURL的JSON响应无效,curl,playframework-2.0,Curl,Playframework 2.0,PlayFramework2.1.1(Java)告诉我发送的JSON无效时,我遇到了一个问题。play framework 2.x和2.1.0也存在类似/可能相同的问题,但应该在play framework 2.1.1 afaik中解决:请参阅 这就是我在代码中所做的,我已尝试将其缩短一点: import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonNode; import org.codehaus.jack

PlayFramework2.1.1(Java)告诉我发送的JSON无效时,我遇到了一个问题。play framework 2.x和2.1.0也存在类似/可能相同的问题,但应该在play framework 2.1.1 afaik中解决:请参阅

这就是我在代码中所做的,我已尝试将其缩短一点:

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;
import play.libs.Json;
import play.mvc.BodyParser;

@BodyParser.Of(BodyParser.Json.class)
public static Result login() {
    JsonNode json = request().body().asJson();
}
当我跑步时:

curl -v -H "Content-Type: application/json" -X POST -d '{"email":"test@test.de","password":"test"}' http://localhost:9000/mobile/login
我得到以下回应:

< HTTP/1.1 400 Bad Request
< Content-Type: text/html; charset=utf-8
< Content-Length: 1917
...
<p id="detail">
    For request 'POST /mobile/login' [Invalid Json]
</p>
...
我做错什么了吗?任何帮助都将不胜感激,因为这是我的第一个Play 2项目


更新:我忘了提到我还有一个iOS客户端,它使用AFNetworking自动构建JSON,我在那里也得到了一个无效的JSON响应。因此,这似乎不是无效的JSON导致的…

代码中没有任何错误。您是否使用windows命令行(
CMD.exe
)运行
curl
?如果使用
CMD.exe
运行
curl
,则必须修复要传递的JSON格式数据。我认为在Windows中,使用quote与UNIX机器有点不同

最简单的修复方法是避免使用单引号,并使用双引号来开始和结束JSON数据,JSON数据中的双引号(通过
\
字符)可能有点累,但应该可以工作:

curl -v -H "Content-Type: application/json" -X POST -d "{\"email\":\"test@test.de\",\"password\":\"test\"}" http://localhost:9000/mobile/login
或者,您可以使用或其他类似UNIX的windows命令行作为替代命令行,因为其行为可能与UNIX计算机类似


希望对你的朋友有用。:)

好吧,我终于找到了答案。我的问题是,有人在游戏中有类似的问题我在CMD中也有同样的问题,这解决了问题:

C:\Windows\System32>curl -v -u login:password -X PUT -d "{\"test\":\"aaa\",\"name\":\"Kowalski\"}" http://127.0.0.1:5984/albums/2340234802938424f7w783

注意:在Cygwin程序中,此问题不会发生。

谢谢您的回复!我正在使用OSX。我刚刚尝试了您关于转义JSON的提示,但仍然得到“无效JSON”作为响应。这会让我感到惊讶,因为我有一个iOS客户端,它也会得到相同的响应,并使用AFNetworking lib来处理JSON请求。我忘了在我原来的帖子里提到这个,对不起!您还可以使用curl命令安装包含GitBash的Git。
"com.notnoop.apns" % "apns" % "0.2.3"
C:\Windows\System32>curl -v -u login:password -X PUT -d "{\"test\":\"aaa\",\"name\":\"Kowalski\"}" http://127.0.0.1:5984/albums/2340234802938424f7w783