放心设置内容类型

2022-09-02 10:13:33

我正在尝试使用 rest 放心调用 rest 调用。我的 API 接受,作为内容类型,我需要在调用中设置。我设置了内容类型,如下所示。"application/json"

备选案文1

Response resp1 = given().log().all().header("Content-Type","application/json")
   .body(inputPayLoad).when().post(addUserUrl);
System.out.println("Status code - " +resp1.getStatusCode());

备选案文2

Response resp1 = given().log().all().contentType("application/json")
   .body(inputPayLoad).when().post(addUserUrl);

我得到的响应是“415”(指示“不支持的媒体类型”)。

我尝试使用普通的java代码调用相同的api,并且它有效。由于某种神秘的原因,我无法通过RA来工作。

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(addUserUrl);
    StringEntity input = new StringEntity(inputPayLoad);
    input.setContentType("application/json");
    post.setEntity(input);
    HttpResponse response = client.execute(post);
    System.out.println(response.getEntity().getContent());
    /*
    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
    String line = "";
    while ((line = rd.readLine()) != null) {
        System.out.println("Output -- " +line);
    }

答案 1

我在使用放心的2.7版本时遇到了类似的问题。我尝试设置 contentType 并接受 application/json,但它不起作用。在最后添加车厢馈送和新行字符,因为以下内容对我有用。

RestAssured.given().contentType("application/json\r\n")

API似乎缺少在Content-Type标头之后添加新行字符,因此服务器无法区分媒体类型和其余请求内容,因此引发错误415 - “不支持的媒体类型”。


答案 2

下面是使用CONTENT_TYPE作为 JSON 的完整 POST 示例。

import io.restassured.http.ContentType;

RequestSpecification request=new RequestSpecBuilder().build();
ResponseSpecification response=new ResponseSpecBuilder().build();
@Test
public void test(){
   User user=new User();
   given()
    .spec(request)
    .contentType(ContentType.JSON)
    .body(user)
    .post(API_ENDPOINT)
    .then()
    .statusCode(200).log().all();
}

推荐