2017-02-15 8 views
0

Springレスト・ドキュメントでGetメソッドのテストケースがあります。それは正常に動作します。 Postメソッドのコードと同じように、次のようになります。Spring Rest Docsエラー - 「入力終了のためにマップするコンテンツがありません」

Foo foo = new Foo(...); 
    this.mockMvc.perform(post("/foos") 
      .contentType(APPLICATION_JSON_UTF8) 
      .content(objectMapper.writeValueAsString(foo))) 
      .andExpect(status().isCreated()) 
      .andExpect(header().string("Location", notNullValue())) 
      .andDo(document("foo-post", preprocessResponse(prettyPrint()), 
        links(
          halLinks(), 
          linkWithRel("self").description("..."), 
          linkWithRel("foo").description("...")), 
        responseFields(
          fieldWithPath("attr1").description("..."), 
          fieldWithPath("attr2").description("..."), 
          ... 
          fieldWithPath("_links").description("<<resource-book-links,links>> to other resources") 
        ) 
      )); 

私はエラーになります。

org.springframework.restdocs.snippet.ModelCreationException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: [[email protected]; line: 1, column: 0] 
at org.springframework.restdocs.hypermedia.LinksSnippet.createModel(LinksSnippet.java:131) 
at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64) 
at org.springframework.restdocs.generate.RestDocumentationGenerator.handle(RestDocumentationGenerator.java:196) 
at org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:55) 
at org.springframework.test.web.servlet.MockMvc$1.andDo(MockMvc.java:177) 
at com.example.SpringDataSampleApplicationTests.createBookRest(SpringDataSampleApplicationTests.java:173) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 
at org.springframework.restdocs.JUnitRestDocumentation$1.evaluate(JUnitRestDocumentation.java:55) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: [[email protected]; line: 1, column: 0] 
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) 
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3838) 
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3783) 
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2929) 
at org.springframework.restdocs.hypermedia.AbstractJsonLinkExtractor.extractLinks(AbstractJsonLinkExtractor.java:41) 
at org.springframework.restdocs.hypermedia.LinksSnippet.createModel(LinksSnippet.java:127) 
... 41 more 

"andDo(..)"の後にコメントすると問題ありません。つまり、問題はドキュメントセクションにあります。

何が欠けていますか?

+0

応答に本文がないようです。例外の完全なスタックトレースは何ですか? –

+0

こんにちはAndy、質問に完全なスタックトレースを追加します。 responseFieldsセクションにコメントすると、エラーも発生します。また、Postメソッドには、Getと同じPostのデータがあります。 – vic

+0

レスポンスボディが空のために失敗したリンクスニペットです。 Locationヘッダーを使って201 Createdレスポンスをテストしているとすれば、空のボディが私にはおそらくありそうです。空ではないと確信していますか? –

答えて

2

MockMvcを使用したテストでは、POSTリクエストにAcceptヘッダーが設定されていません。つまり、デフォルトでは、Spring Data RESTには、Createdレスポンスにボディが含まれていません。 configure Spring Data REST to always return a body for create requestsにするか、Acceptヘッダーを送信するようにテストを変更する必要があります。

+0

郵便番号の設定と異なる設定ですか? Postmanの手動テストでは、ヘッダーに設定する必要があるのはcontent-typeだけです。また、私はあなたのテストコードを見ているhttps://github.com/spring-projects/spring-restdocs/blob/master/samples/rest-notes-spring-hateoas/src/test/java/com/example/ notes/ApiDocumentation.javaでは、ヘッダーの設定に違いはありません。 – vic

+0

これらのテストでは、Spring Data RESTではなく、Spring HATEOASを使用しています。彼らはまた、201レスポンスの本体がないので、それを記録しません。なぜ私が提案したことを試してみませんか?興味深い! –

+0

! HAL JSONで受け入れを追加した後で実際に動作します。 – vic

関連する問題