8

次の問題のデバッグに多くの時間を費やしましたが、どこで問題が発生しているのかわかりません。

問題:400 Bad Request, Invalid Json次の例外を含む応答として取得:

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: [B@6ee503c9; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2931) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2846) ~[jackson-databind.jar:2.2.2]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1569) ~[jackson-databind.jar:2.2.2]
    at play.api.libs.json.JacksonJson$.parseJsValue(JsValue.scala:480) ~[play-json_2.10.jar:2.2.0]
    at play.api.libs.json.Json$.parse(Json.scala:27) ~[play-json_2.10.jar:2.2.0]

私のコントローラーでテストする方法:

  def createArticle(id: String) =
      Action.async(parse.json) { implicit request =>
        (request.body \ "content").asOpt[String].map {
            ............
            ............
        }.getOrElse(BadRequest("Invalid request body"))
      }

対応する単体テスト:

  "create article" in {
    running(FakeApplication()) {
      val postJson = Json.obj("content" -> "article content")

      val result = resource.createArticle(ARTICE_ID)(FakeRequest(POST, controllers.routes.ArticleResource.create(ARTICLE_ID).url).withJsonBody(postJson).withHeaders(CONTENT_TYPE -> "application/json").run

      status(result) must equalTo OK
    }
  }

ここで議論を読みましたが、そこにある提案はどれも役に立ちませんでした。

4

3 に答える 3

0

私は同様の問題を抱えていましたが、これまでのところ解決していません(エレガントに、とにかく..)。私の環境は scala ではなく Java だったので、直感でわかります。投稿を送信すると、非同期で行われる可能性があると思います(記事の作成メソッドのAction.async)。そのため、問題がないかどうかを確認する前に、テストコードの結果を待つ必要がある可能性があります。

于 2013-10-31T21:59:16.367 に答える