2013-05-11 102 views
3

我有一個問題與播放框架2.1.1(Java)告訴我,我發送無效的JSON。播放框架2.x和2.1.0有類似/可能相同的問題,但它應該在播放框架2.1.1 afaik中解決:請參閱Invalid JSON in Play Framework 2.1使用CURL無效的JSON響應

這就是我正在做的代碼中,我試圖使它有點短:

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":"[email protected]","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> 
... 

我清理了我的項目並重新運行了好幾次。當運行約我得到以下輸出玩法:

[info] Loading project definition from /path/to/project 
[info] Set current project to FFPushAlarmPlay (in build file:/path/to) 
[info] This is sbt 0.12.2 
[info] The current project is {file:/path/to}... 
[info] The current project is built against Scala 2.10.0 
[info] Available Plugins: play.Project, sbt.PlayProject, com.typesafe.sbteclipse.plugin.EclipsePlugin, com.typesafe.sbtidea.SbtIdeaPlugin 
[info] sbt, sbt plugins, and build definitions are using Scala 2.9.2 

我做得非常不對?任何幫助將不勝感激,因爲這是我的第一個播放2項目!

更新:我忘了提及,我也有一個iOS客戶端,它使用AFNetworking自動構建JSON,我也在那裏得到一個無效的JSON響應。所以它似乎不是無效的JSON導致這...

回答

0

好吧,我終於回過頭來看看這個,我找到了答案。我面臨的問題是在Play < 2.1.1中有類似的問題,我相信這是一個類似的問題,事實並非如此。

我在我的play-project的lib目錄中的項目中添加了一個非託管依賴項。圖書館是notnoop java-apns(https://github.com/notnoop/java-apns)。在內部,它使用Play框架也使用的org.codehaus.jackson類。我使用的版本是0.1.5,相當陳舊。

修復,只需從lib目錄中移除apns-library,將它從eclipse中的構建路徑中移除,然後在project/target/Build中移除。斯卡拉添加一個管理的依賴:

"com.notnoop.apns" % "apns" % "0.2.3" 

希望這可以幫助誰遇到類似的問題!

8

你的代碼沒有錯。你使用Windows命令行(CMD.exe)來運行curl?如果您使用CMD.exe運行curl,則必須修復要傳遞的JSON格式數據。我認爲在Windows中,使用引用與UNIX機器有點不同。使用單引號和使用雙引號來開始和結束JSON數據,與在JSON數據逃脫雙引號(由\字符)

最簡單的解決方法是避免,可以是累一點,但它應該工作:

curl -v -H "Content-Type: application/json" -X POST -d "{\"email\":\"[email protected]\",\"password\":\"test\"}" http://localhost:9000/mobile/login 

,或者您可以使用cygwin用於Windows作爲替代命令行其他類Unix的命令行因爲它的行爲可能爲UNIX機器。

希望它對你的朋友有用。 :)

+0

感謝您的回覆!我正在使用OS X.我只是嘗試了關於轉義JSON的提示,但仍然會收到「無效的JSON」作爲響應。這會讓我感到驚訝,因爲我有一個iOS客戶端,它也得到相同的響應,並使用AFNetworking庫來處理JSON請求。我忘了在我原來的帖子中提到這個,對不起! – mactunes 2013-05-13 10:45:16

+0

你也可以安裝包含Git Bash和curl命令的Git。 – null 2014-09-05 13:44:05

-1

我曾在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中,這個問題不會發生。