Java 利用SpringRestDocs DSL进行验证
我们的REST API是由一组使用Spring Restdocs的测试以标准方式记录的(通过Java 利用SpringRestDocs DSL进行验证,java,json,validation,spring-restdocs,Java,Json,Validation,Spring Restdocs,我们的REST API是由一组使用Spring Restdocs的测试以标准方式记录的(通过mockMvc.perform(…)…和do(document().fieldWithPath(…)语句)。由于字段具有类型和强制/可选标志,我想在生产代码中重用这些信息以进行响应体验证 我将SpringRestDocs移动到compileMaven范围,并将代码段创建移动到生产代码中,在src/main代码中,它对文档化测试和响应主体拦截器都可见(后者只调用responsefeldssnippet.cr
mockMvc.perform(…)…和do(document().fieldWithPath(…)
语句)。由于字段具有类型和强制/可选标志,我想在生产代码中重用这些信息以进行响应体验证
我将SpringRestDocs移动到compile
Maven范围,并将代码段创建移动到生产代码中,在src/main代码中,它对文档化测试和响应主体拦截器都可见(后者只调用responsefeldssnippet.createModel
方法)。除了以下陷阱外,一切正常:对象的空集合看起来无效,因为框架尝试将对象字段的规则与不存在的数据进行匹配
例如,假设cat的JSON被描述为fieldWithPath(“kittens[]),fieldWithPath(“kittens[].name”)
,那么实际的JSON{“kittens”:[]}
似乎无效,因为后一个描述符不满足要求。在测试样本中,这种情况不会发生,因为数据是为了最大限度地提高文档效益而制作的,但在实际案例中这是个问题
基于这一观察,我倾向于将重用RESDOCTS DSL作为一个坏主意。在切换到重量级解决方案ALA-JSON模式之前,我想问:RESDCORs提供了一些方式来将字段描述符表示为树而不是规则列表吗?例如,“代码>字段FielPATH(“小猫”)之类的东西。,subfieldWithPath(“name”)(我认为无论我的情况如何,它都会很有用。)
我浏览并详细阐述了文档中的示例,这些示例似乎很有希望,但AFAIK实际上并未涵盖这种情况,即:subsectionWithPath(跳过子树)、beneathPath(只关注子树)或responseFieldsSsnippet.andWithPrefix
(创建列表的唯一快捷方式,但仍然不包括列表树)
谢谢你的意见!我终于发现问题在更新的库版本中得到了解决,即1.2.5和2.0.2(我有1.2.2)。上面的示例必须表示为
fieldWithPath("kittens"),
fieldWithPath("kittens[]").optional(),
fieldWithPath("kittens[].name").type(STRING)
此设置表示kitten
字段本身是必需的,但数组允许为空,因此在这种情况下不需要任何字段name
(type
名称必须显式声明,因为库无法从数据中获取线索)
更多信息:,另一个例子可以在从问题链接的提交中找到
(注意:升级到2.0.2,因为它还需要升级Spring,这在当前是不可能的。)
原来问题的答案是否定的,因为SpringRestDocs仍然保留字段描述符的列表格式