2016-07-27 3 views
2

json 응답을 위해 안심할 수있는 grails rest-api의 스 니펫으로 ascii doc을 구현하려고합니다.Grails 3.1.8 : Rest 나머지를 사용하는 Spring Rest Docs PayloadHandlingException : com.fasterxml.jackson.databind.JsonMappingException

{ 
    "instanceList": [ 
    { 
     "firstName": "Coy", 
     "lastName": "T", 
     "pictureUrl": null, 
     "email": "[email protected]", 
     "bio": null, 
     "skills": [], 
     "interestAreas": [] 
    }, 
    { 
     "firstName": "Jane", 
     "lastName": "D", 
     "pictureUrl": null, 
     "email": "[email protected]", 
     "bio": null, 
     "skills": [], 
     "interestAreas": [] 
    }, 
    { 
     "firstName": "Cause", 
     "lastName": "C", 
     "pictureUrl": "https://cc-picture.com", 
     "email": "[email protected]", 
     "bio": "cc beyond infinity", 
     "skills": [], 
     "interestAreas": [] 
    }, 
    { 
     "firstName": "sachidanand", 
     "lastName": "v", 
     "pictureUrl": null, 
     "email": "[email protected]", 
     "bio": null, 
     "skills": [], 
     "interestAreas": [] 
    } 
    ], 
    "totalCount": 4 
} 

과 (IntegrationTest 등) UserDocumentationApiSpec의 코드 : 코드의

void 'test and document get request for /user'() { 
     expect: 
     given(documentationSpec) 
       .header("AuthToken", "TokenValue") 
       .accept(MediaType.APPLICATION_JSON.toString()) 
       .filter(document('user-list-v1', 
       preprocessRequest(modifyUris() 
         .host('127.0.0.1') 
         .removePort()), 
       preprocessResponse(prettyPrint()), 
       responseFields(
         fieldWithPath("[].firstName").description("First name of user"), 
         fieldWithPath("[].lastName").description("Last name of user"), 
         fieldWithPath("[].pictureUrl").type(JsonFieldType.STRING).description("Picture Url of user"), 
         fieldWithPath("[].email").description("Email address of user"), 
         fieldWithPath("[].bio").description("Bio data of user"), 
         fieldWithPath("totalCount").description("Count of instanceList field"), 
         fieldWithPath("type").description("Type of result") 
       ))). 
       when() 
       .port(8080) 
       .get('/api/v1/user') 
       .then() 
       .assertThat() 
       .statusCode(is(200)) 
    } 

이 부분을 나에게 오류 추적을주는 등 :

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:50) 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:113) 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.createModel(AbstractFieldsSnippet.java:74) 
    at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64) 
    at org.springframework.restdocs.generate.RestDocumentationGenerator.handle(RestDocumentationGenerator.java:192) 
    at org.springframework.restdocs.restassured.RestDocumentationFilter.filter(RestDocumentationFilter.java:63) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73) 
    at com.jayway.restassured.filter.session.SessionFilter.filter(SessionFilter.java:60) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73) 
    at org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer.filter(RestAssuredRestDocumentationConfigurer.java:65) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy:1574) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.get(RequestSpecificationImpl.groovy:159) 
    at com.converge.docs.UserApiDocumentationSpec.$tt__$spock_feature_0_0(UserApiDocumentationSpec.groovy:73) 
    at com.converge.docs.UserApiDocumentationSpec.test and document get request for /user_closure2(UserApiDocumentationSpec.groovy) 
    at groovy.lang.Closure.call(Closure.java:426) 
    at groovy.lang.Closure.call(Closure.java:442) 
    at grails.transaction.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:70) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) 
    at grails.transaction.GrailsTransactionTemplate.executeAndRollback(GrailsTransactionTemplate.groovy:67) 
    at com.converge.docs.UserApiDocumentationSpec.test and document get request for /user(UserApiDocumentationSpec.groovy) 
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) 
    ... 21 more 
내가 잘못거야 어디 제발 올바른 617,451,515,

...

+0

'http : //127.0.0.1 : 8080/api/v1/user'에 대한 get 요청의 응답이 유효한 JSON이 아닌 것 같습니다. 당신이 그것을 컬하면 어떤 반응을 얻습니까? –

+0

** 클라이언트에서 ** http : //127.0.0.1 : 8080/api/v1/user'을 친다 ** 위와 같이 적절한 ** json ** 응답을 얻었습니다. 200 ok 상태 –

+0

질문에 표시된 응답 유효하지 않습니다 JSON –

답변

1

나는이 실패에 대해 볼 수있는 유일한 이유는 당신이 /api/v1/user 엔드 포인트에서 예상되는 응답을받지한다는 것이다.

  1. 확인 인스턴스가 데이터베이스에있다 :

    다음 단계를 따르십시오.

  2. 올바른 토큰을 보내고 있는지 확인하십시오.
  3. RestBuilder를 사용하여 테스트 케이스를 작성하고 예상 응답을 실제로 받았는지 확인하십시오.

코드와 JSON이 정상적으로 보입니다.

또한 issue을 따르고 빈 배열 필드를 선택 사항으로 표시하고 내용에 유형을 명시 적으로 제공해야합니다.

이 정보가 도움이되기를 바랍니다. 응답이없는 경우 org.springframework.restdocs.payload.PayloadHandlingException: com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input

:

+0

고마워,이게 문제를 해결했다 !! 내가 지나가던 '토큰'이 틀렸고 응답이 없었다. 또한, 당신이 언급 한 문제는, 나는 그것을 따라하고 비어있는 응답 배열에 콘텐츠 유형을 추가했습니다. –

1

나는 자주 오류를 참조하십시오. 이 메시지는 get 요청입니다. 이러한 통합 테스트는 RestClient보다는 Grails에서 약간 다르게 작동합니다. 이 테스트 또는 bootstrap.Groovy 파일에 샘플 데이터 포인트를 설정 했습니까? 나머지 코드는 통합 테스트로 어떻게 실행하는지 알 수 없습니다. 예제 Grails 예제에서 Bootstrap.groovy 파일에 테스트 데이터를 설정했다.

내가 도와 드릴 수 있는지 알려 주시기 바랍니다.

+0

감사. 예, 응답이 없었습니다. –

관련 문제