Spring Boot 如何在OkHttp RequestBody中传递json对象以调用外部API

8dtrkrch  于 2023-06-22  发布在  Spring
关注(0)|答案(3)|浏览(243)
@Test
     public void whenSendPostRequest_thenCorrect() 
     throws IOException {
      RequestBody formBody = new FormBody.Builder()
        .add("username", "test")
        .add("password", "test")
        .build();

     Request request = new Request.Builder()
      .url(BASE_URL + "/users")
      .post(formBody)
      .build();

      Call call = client.newCall(request);
      Response response = call.execute();
    
      assertThat(response.code(), equalTo(200));
      }

参考-https://www.baeldung.com/guide-to-okhttp
我试图执行这种类型的请求,在形成formBody时,我必须做一些类似的事情来拥有.add(“something”,json_object),但它接受字符串值,我不能传递json字符串如何解决这个问题
而且json_object非常大,所以不能只为每个键值对使用许多.add语句

pxiryf3j

pxiryf3j1#

建议您创建一个model/pojo类,其字段与json字符串中的字段相同。然后将该类类型的对象添加到FormBody类中。您可以使用json到对象Map器将输入json转换为新模型类的对象。

ryevplcw

ryevplcw2#

因此,您需要在此处进行集成测试。我正在使用这样的东西:

TestDto testDto = new TestDto(); //  you need to set the field variables here

given()
    .header(HttpHeaders.AUTHORIZATION, createJwtToken(ADMIN_ID))
    .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
    .header(HttpHeaders.ACCEPT_LANGUAGE, LANG_EN)
    .contentType(ContentType.JSON)
    .body(objectMapper.writeValueAsString(testDto))
    .when()
        .log().all()
        .post(CONTROLLER_ENDPOINT)
    .then()
        .log().all()
        .statusCode(HttpStatus.CREATED.value())
    .extract()
        .body().as(TestDto.class);

given()将在rest-assured中找到。
ObjectMapper是一个可以在Jackson库中找到的类:Jackson数据处理器createJwtToken()负责给予具有ADADMIN_ID的JWT。
希望会有帮助。

6mzjoqzu

6mzjoqzu3#

经过一些探索,我发现我们可以使用okhttp Requestbody class create方法将json_string转换为请求体json,该方法将json mediatype和json_string作为参数,然后这个体可以传递给请求构建器的.post方法。

MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, json_string);

相关问题