2016-05-20 12 views
1

Ich baue eine API von Grund auf und dokumentiere sie mit Spring Rest Docs (1.0.1) und derzeit gibt es keine Antwortfelder für eine bestimmte API.Wie sagen Sie "No Response Felder" mit Spring Rest Docs?

Ich weiß, dass ich das manuell in der ADOC-Datei dokumentieren konnte, aber wenn wir später die API und Antwortfelder ins Spiel bringen, möchte ich, dass der Komponententest einsetzt und mich warnt, dass ich aktualisieren muss.

Wenn ich versuche:

getDocument().snippets(PayloadDocumentation.responseFields()); 

oder

getDocument().snippets(PayloadDocumentation.responseFields(Collections.emptyMap())); 

ich die folgende Fehlermeldung erhalten:

org.springframework.restdocs.payload.PayloadHandlingException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input 
at [Source: [[email protected]; line: 1, column: 1] 
    at org.springframework.restdocs.payload.JsonContentHandler.readContent(JsonContentHandler.java:84) 
    at org.springframework.restdocs.payload.JsonContentHandler.findMissingFields(JsonContentHandler.java:49) 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:112) 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.createModel(AbstractFieldsSnippet.java:73) 
    at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64) 
    at org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:101) 
    at org.springframework.test.web.servlet.MockMvc.applyDefaultResultActions(MockMvc.java:195) 
    at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:163) 
    at com.cafex.services.web.SchedEventControllerTest.createNewEvent(SchedEventControllerTest.java:55) 
    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:498) 
    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.RestDocumentation$1.evaluate(RestDocumentation.java:59) 
    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:254) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 
    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:193) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input 
at [Source: [[email protected]; line: 1, column: 1] 
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) 
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3781) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3721) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2819) 
    at org.springframework.restdocs.payload.JsonContentHandler.readContent(JsonContentHandler.java:81) 
    ... 40 more 

Antwort

1

Wie Sie gesehen haben, ist REST-Dokumente unterstützen, die nicht an der Moment. Als eine Alternative würde ich empfehlen, die Standard-MockMvc-Erwartungen zu verwenden, um zu bestätigen, dass die Antwort keinen Körper wie MockMvcResultMatchers.content().bytes(new byte[0]) hat.

Ich habe an issue geöffnet, um REST Docs zu verbessern, damit Sie das Snippet auf die Weise verwenden können, die Sie versucht haben.