Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 利用SpringRestDocs DSL进行验证_Java_Json_Validation_Spring Restdocs - Fatal编程技术网

Java 利用SpringRestDocs DSL进行验证

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

我们的REST API是由一组使用Spring Restdocs的测试以标准方式记录的(通过
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仍然保留字段描述符的列表格式