spring - Grails 3 - 使用 JSON View 时放心给出 SnippetException 的 Spring Rest 文档

标签 spring rest grails grails-3.1 spring-restdocs

我正在尝试将 Spring REST 文档与 Grails 3.1.4 应用程序放心集成。我正在使用 JSON View 。

完整代码位于https://github.com/rohitpal99/rest-docs

在 NoteController 中使用时

List<Note> noteList = Note.findAll()
Map response = [totalCount: noteList.size(), type: "note"]
render response as grails.converters.JSON

文档生成效果很好。

但我想使用 JSON View ,例如

respond Note.findAll()

我在/views 目录中有 _notes.gson 和 index.gson 文件。我收到一个 SnippetException。通常的/notes GET 请求响应是正确的。

rest.docs.ApiDocumentationSpec > test and document get request for /index FAILED
    org.springframework.restdocs.snippet.SnippetException at ApiDocumentationSpec.groovy:54

没有消息。无法追踪其发生的原因。 请建议。

完整的堆栈跟踪

    org.springframework.restdocs.snippet.SnippetException: The following parts of the payload were not documented:
{
  "instanceList" : [ {
    "title" : "Hello, World!",
    "body" : "Integration Test from Hello"
  }, {
    "title" : "Hello, Grails",
    "body" : "Integration Test from Grails"
  } ]
}
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:134)
    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 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 rest.docs.ApiDocumentationSpec.$tt__$spock_feature_0_0(ApiDocumentationSpec.groovy:54)
    at rest.docs.ApiDocumentationSpec.test and document get request for /index_closure2(ApiDocumentationSpec.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 rest.docs.ApiDocumentationSpec.test and document get request for /index(ApiDocumentationSpec.groovy)

最佳答案

如果您尝试记录不存在的内容或未能记录存在的内容,REST Docs 将会失败。您已在测试中记录了两个字段:

responseFields(
    fieldWithPath('totalCount').description('Total count'),
    fieldWithPath('type').description("Type of result")
)))

REST Docs 未通过测试,因为响应的某些部分尚未记录。具体来说,是一个 instanceList 数组,其中包含带有两个键的 map :titlebody。您可以使用如下内容记录这些字段和其他两个字段:

responseFields(
    fieldWithPath('totalCount').description('Total count'),
    fieldWithPath('type').description("Type of result"),
    fieldWithPath('instanceList[].title').description('Foo'),
    fieldWithPath('instanceList[].body').description('Bar')
)))

关于spring - Grails 3 - 使用 JSON View 时放心给出 SnippetException 的 Spring Rest 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642023/

相关文章:

c# - ASP.net Web API 中 MVC 的 DefaultModelBinder 的等价物是什么?

database - Grails 一对一关系

java - Spring data + MongoTemplate - 对文档的约束不会影响插入\保存

java - 如何使用Spring Cloud Netflix Zuul作为SSL反向代理

java - Spring MVC : What are the allowable default date formats?

java - Spring-Boot REST 服务基本 http auth 排除一个端点

java - 为什么我找不到 SSL 握手的信任库?

spring - Spring Security:REST API需要哪个过滤器

tomcat - 将应用程序升级到 Grails 2 后 JBoss 部署错误

java - 我需要关闭连接吗