2013-05-11 2 views
3

У меня возникла проблема с интерфейсом воспроизведения 2.1.1 (Java), сообщающим, что я отправляю Invalid JSON. Аналогичная проблема, возможно, та же проблема для игровой платформы 2.x и 2.1.0, но она должна была быть решена в игровой системе 2.1.1 afaik: см. Invalid JSON in Play Framework 2.1Неверный ответ JSON с использованием CURL

Это то, что я делаю в код, я попытался сделать его немного короче:

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 

я делаю что-то ужасно неправильно? Любая помощь будет принята с благодарностью, поскольку это мой первый проект Play 2!

Обновление: Я забыл упомянуть, что у меня также есть клиент iOS, который автоматически создает JSON с использованием AFNetworking, а также получаю там недействительный ответ JSON. Таким образом, это не похоже на недопустимое JSON, вызывающее это ...

ответ

0

Хорошо, я, наконец, вернулся к рассмотрению этого вопроса, и я нашел ответ. Проблема для меня заключалась в том, что в Play < были люди с аналогичными проблемами 2.1.1, и я полагал, что это была аналогичная проблема, которой она не была.

Я добавил неуправляемую зависимость от проекта в каталоге lib моего игрового проекта. Библиотека была notnoop java-apns (https://github.com/notnoop/java-apns). Внутри он использует классы org.codehaus.jackson, которые также используют среда Play. Я использовал версию 0.1.5, которая довольно старая.

Исправление, просто удалите библиотеку apns из каталога lib, удалите его из пути сборки в eclipse, а затем в project/target/Build.scala добавить управляемую зависимость:

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

Надеюсь, что это поможет любому, кто сталкивается с подобными проблемами!

8

В коде нет ничего плохого. Используете ли вы оконную командную строку (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 или другой-UNIX-подобных-командной строки для окон как альтернативной командной строки, так как его поведение, в UNIX машине.

Надеюсь, это полезно для вас, друг. :)

+0

Спасибо за ответ! Я использую OS X. Я просто попробовал ваш намек на ускорение работы JSON, но все равно получаю «Invalid JSON» в качестве ответа. Это меня удивило бы, поскольку у меня есть клиент iOS, который также получает тот же ответ и использует AFNetworking lib для запроса JSON. Я забыл упомянуть об этом в своем оригинальном посте, извините! – mactunes

+0

Вы также можете установить Git, который включает в себя Git Bash с командой curl. – null

-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 

P.S. В программе Cygwin эта проблема не возникает.

Смежные вопросы