web-dev-qa-db-ja.com

安心してコンテンツタイプを設定

私は残りの安心を使用して残りの呼び出しを呼び出そうとしています。私の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);
    }
13
TechRookie

安心の2.7バージョンで作業しているときに、同様の問題に直面しました。 contentTypeとaccept/application/jsonの両方を設定しようとしましたが、機能しませんでした。次のように機能したので、最後にキャリッジフィードと改行文字を追加しました。

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

サーバーがメディアタイプと残りのリクエストコンテンツを区別できないため、Content-Typeヘッダーの後に改行文字を追加するAPIがないため、エラー415-"Unsupported media type"がスローされます。

11
Samrat.K

以下は、完全なPOSTの例で、コンテンツタイプをJSONとして使用しています。

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();
}
3
Nitin Pawar

試してみましたgiven()。contentType(ContentType.JSON).body(inputPayLoad.toString)

1
Anoop Philip

私は似たような問題に直面していましたが、しばらくして、問題が実際にサーバー側から発生していることに気付きました。 Postmanでの呼び出しを確認し、トリガーされたときにHTMLからJSONに変更する必要があるかどうかを確認してください。それを行う必要がある場合、backendが応答を強制的にJSONコンテンツタイプを追加してフォーマットします。 それがJSONでエンコードされている場合でも、それを行う必要がある場合があります。

追加したコード行:

header('Content-type:application/json;charset=utf-8');

  public function renderError($err){
   header('Content-type:application/json;charset=utf-8');
   echo json_encode(array(
       'success' => false,
       'err' => $err
   ));
}

そしてそれがバックエンドで起こっていたことです:

enter image description here

それがなんとか役立つことを願っています。 :)

0
0

最初のオプションとして、このヘッダーも追加してリクエストを送信してみてください。

.header("Accept","application/json")

0
Raghu Kiran
import io.restassured.RestAssured;
import io.restassured.http.ContentType;

import static org.hamcrest.Matchers.is;
import org.testng.annotations.Test;
import static io.restassured.RestAssured.given;

public class googleMapsGetLocation {
    @Test
    public void getLocation() {
        RestAssured.baseURI = "https://maps.googleapis.com";
        given().param("location", "-33.8670522,151.1957362")
            .param("radius", "500")
            .param("key", "AIzaSyAONLkrlUKcoW-oYeQjUo44y5rpME9DV0k").when()
            .get("/maps/api/place/nearbysearch/json").then().assertThat()
            .statusCode(200).and().contentType(ContentType.JSON)
            .body("results[0].name", is("Sydney"));
    }
}
0
Anil Jain

以前の投稿で述べたように、メソッドがあります:

RequestSpecification.contentType(String value)

私も働いていませんでした。しかし、最新バージョン(現時点では2.9.0)にアップグレードした後は機能します。だからアップグレードしてください:)

0