如何使用rest-assured将json数组放入httpput调用中?

e0bqpujr  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(285)

我使用rest assured测试了一个api,该api要求我使用json数组对请求体执行http put,结果如下所示:

["6", "7", "8", "9", "10"]

请注意,这不需要开始和结束{}——只需要方括号。
pom.xml文件:

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.3.2</version>
</dependency>

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-path</artifactId>
    <version>4.3.2</version>
</dependency>

myapiresttest.java文件:

public class MyApiRestTest {

      private static final String BASE_URL = "http://localhost:8080/ams/rest";
      private static final String TOKEN = "AMIIinPiyPqMpViABA41HL8xTSsf";

      private static RequestSpecification requestSpec;

      @BeforeAll
      public static void setUpHeaders() {
          RequestSpecBuilder builder = new RequestSpecBuilder();
          builder.addHeader("Token", TOKEN);
          builder.addHeader("Content-Type", "application/json");
          builder.addHeader("Accept", "application/json");
          requestSpec = builder.build();
          requestSpec.config(RestAssured.config().objectMapperConfig(new ObjectMapperConfig(ObjectMapperType.GSON)));
      }

      @Test
      @DisplayName("PUT /v1/uids/{public-id}")
      public void updateUids() {
          String publicId = "ABCD786EFGH45";

          List<String> uids = new ArrayList<>();

          uids.add("6");
          uids.add("7");
          uids.add("8");
          uids.add("9");
          uids.add("10");

          given().spec(requestSpec)
               .pathParam("public-id", publicId)
               .body(uids)
          .when()
               .put(BASE_URL + "/v1/uids/{public-id}")
               .then()
               .statusCode(200);
      }

}

运行此操作时,出现以下错误:

java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.

尝试使用此json数组的不同变体/方法,方法如下:
第一种方法:

String jsonArray = "[\"6\", \"7\", \"8\", \"9\", \"10\"]";

随后:

given().spec(requestSpec)
       .pathParam("public-id", publicId)
       .body(jsonArray)
.when()
       .put(BASE_URL + "/v1/uids/{public-id}")
       .then()
       .statusCode(200);

第二种方法:
使用 String[] uidsArray = {"6", "7", "8", "9", "10"}; 随后:

given().spec(requestSpec)
       .pathParam("public-id", publicId)
       .body(uidsArray)
.when()
       .put(BASE_URL + "/v1/uids/{public-id}")
       .then()
       .statusCode(200);

这两种变体给我的错误与完整源代码列表中提供的错误完全相同(见上文):

java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.

我可能做错了什么?

jutyujz0

jutyujz01#

404错误意味着找不到您的资源,这表明url不正确,而不是请求正文内容有任何问题。

fhg3lkii

fhg3lkii2#

可能是关于网址的,我看得出来 BASE_URL + "/v1/uids/{public-id}" . 我想你想要 {public-id} 成为一个 id 当它执行时,但它不执行。用实际值的字符串形式替换该部分 id 也许能解决你的问题。

相关问题