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 RestAssured-要验证RestAssured中JSON响应的主体结构吗_Java_Json_Rest Assured_Rest Assured Jsonpath_Json Path Expression - Fatal编程技术网

Java RestAssured-要验证RestAssured中JSON响应的主体结构吗

Java RestAssured-要验证RestAssured中JSON响应的主体结构吗,java,json,rest-assured,rest-assured-jsonpath,json-path-expression,Java,Json,Rest Assured,Rest Assured Jsonpath,Json Path Expression,当我请求GET请求时,我得到的是JSON响应,但这里我的要求是验证响应体的结构 例如: { "lotto":{ "lottoId":5, "winning-numbers":[2,45,34,23,7,5,3], "winners":[ { "winnerId":23, "numb

当我请求GET请求时,我得到的是JSON响应,但这里我的要求是验证响应体的结构

例如:

{
   "lotto":{
      "lottoId":5,
      "winning-numbers":[2,45,34,23,7,5,3],
      "winners":[
         {
            "winnerId":23,
            "numbers":[2,45,34,23,3,5]
         },
         {
            "winnerId":54,
            "numbers":[52,3,12,11,18,22]
         }
      ]
   }
}

上面的响应具有结构,因此我需要验证结构而不是一个键值对,如何实现这一点?

最好的方法是验证json模式匹配

首先,需要将此依赖项添加到pom.xml中

<!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
<dependency>
  <groupId>io.rest-assured</groupId>
  <artifactId>json-schema-validator</artifactId>
  <version>3.3.0</version>
  <scope>test</scope>
</dependency>
有许多服务基于json生成模式-例如-

模式文件准备好后,您需要以字符串格式提供文件的路径-例如-

private static final String GET_SUBSCRIPTION_JSON_SCHEMA_PATH =
    "json/schemas/GetSubscriptionByIdSchema.json";
并调用
matchesJsonSchemaInClasspath(“您的/path/to/json模式”)
方法进行断言

UPD:

因此,流程基本上如下所示:

  • 在projectdir中的某个地方有一个模式文件(并且知道它的路径)
  • 您在某种测试方法中达到了终点
  • 将收到的响应与架构文件匹配
实际上,它将如下所示:

  @Test
  public void someTestMethod() {
    Response responseToValidate = // here you should assign and store returned response
    
    responseToValidate
      .assertThat()      
      .statusCode(200)
      .body("json.path.to.needed.key", equalTo("123"))
.body(匹配JSONSCHEMAINCLASSPATH(“path/to/your/schema/in/string/format”);
}

有人能帮忙吗?我有一个问题,如果我们点击了请求,得到了响应,我正试图在响应的帮助下创建模式,并按照您的建议使用。我的问题是我的模式将来自哪里?一方面我有api的响应,但另一方面是模式,我如何得到它?这样我就可以验证我的回答和模式是否有效?@ShivkumarDubey我已经用真实的例子更新了我的答案,请查看。感谢您提供我现在已经了解的更深入的细节。但是我的问题没有回答,如果我得到10个值数据的json响应,并且我只想验证一个而不是全部10个数据,那么我如何才能做到呢@别墅_7@ShivkumarDubey在主题中,你说“验证响应体的结构”,所以我建议你这样做。Json模式方法不适合验证特定值。感谢您的建议,非常感谢,如果您还可以让我知道如何使用数据库值验证api响应,我将不胜感激?
  @Test
  public void someTestMethod() {
    Response responseToValidate = // here you should assign and store returned response
    
    responseToValidate
      .assertThat()      
      .statusCode(200)
      .body("json.path.to.needed.key", equalTo("123"))