我正在尝试使用spring-rest-docs和scacap spring auto rest docs来从单元测试中生成API文档。
我遇到了以下问题:我正在测试我的getAll方法,它返回一个对象数组。在http-response.adoc文件中,我看到所有的对象都被打印出来。假设我的集合中有100个条目,它包含了所有100个条目。我想限制它只打印第一个对象。我怎样才能实现这个目标呢?
作为一个小例子,我报告一个只有2个精灵的数组样本。
{
"content" : [ {
"createdOn" : "2020-05-13T16:40:12+02:00",
"updatedOn" : "2020-05-13T16:40:12+02:00",
"id" : 2,
"name" : "England"
}, {
"createdOn" : "2020-05-13T16:40:12+02:00",
"updatedOn" : "2020-05-13T16:40:12+02:00",
"id" : 1,
"name" : "Italy"
} ],
"first" : true,
"last" : true,
"number" : 0,
"numberOfElements" : 2,
"size" : 10,
"totalElements" : 2,
"totalPages" : 1
}
我想让内容数组只包含它找到的第一个元素。
REST Docs中并没有专门为这个任务而建立的东西,但是有一个通用的机制可以在文档化之前对响应进行预处理以修改其内容。有一些指导在 参考文献 关于实现你自己的预处理器和修改请求或响应的内容。
如果一个内置的预处理器不能满足你的需求,你可以通过实现OperationPreprocessor接口来编写你自己的预处理器。然后,您可以以与任何内置预处理器完全相同的方式使用您的自定义预处理器。
如果你只想修改请求或响应的内容(body),可以考虑实现以下接口
ContentModifier
接口,并将其与内置的ContentModifyingOperationPreprocessor
.
在你的情况下,你的 ContentModifier
将使用杰克逊 ObjectMapper
将响应体中的JSON读入一个 Map<String, Object>
. 然后,它将删除除第一个项目以外的所有项目。array
根据 content
键。这个修改后的地图可以被写回给一个 byte[]
使用 ObjectMapper
并返回。