J'essaie d'invoquer un appel en mode repos. Mon API accepte, "application/json"
comme type de contenu et je dois le définir dans l'appel. Je règle le type de contenu comme mentionné ci-dessous.
Option 1
Response resp1 = given().log().all().header("Content-Type","application/json")
.body(inputPayLoad).when().post(addUserUrl);
System.out.println("Status code - " +resp1.getStatusCode());
Option 2
Response resp1 = given().log().all().contentType("application/json")
.body(inputPayLoad).when().post(addUserUrl);
La réponse que je reçois est "415" (indique que "Type de support non pris en charge").
J'ai essayé d'appeler le même api en utilisant du code Java simple et cela fonctionne. Pour une raison mystérieuse, je ne le ferais pas fonctionner avec 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);
}
J'ai rencontré le même problème lorsque je travaillais avec la version 2.7 de repos-assuré. J'ai essayé de définir le contentType et d'accepter également application/json mais cela n'a pas fonctionné. Ajouter un chariot et des caractères de nouvelle ligne à la fin, comme cela a fonctionné pour moi.
RestAssured.given().contentType("application/json\r\n")
L'API semble manquer pour ajouter de nouveaux caractères de ligne après l'en-tête Content-Type, ce qui empêche le serveur de faire la différence entre le type de média et le reste du contenu de la requête, générant ainsi l'erreur 415 - "Type de média non supporté".
Voici l'exemple complet de POST utilisant le CONTENT TYPE en JSON.Hope vous aidera.
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();
}
Faites un essai Étant donné (). ContentType (ContentType.JSON) .body (inputPayLoad.toString)
Je faisais face à quelque chose de similaire et après un certain temps, nous avons remarqué que le problème venait du serveur. Vérifiez votre appel sur Postman et voyez si, le cas échéant, vous devez le passer de HTML à JSON. Si vous avez besoin de faire cela, le backend peut avoir besoin de pour forcer la réponse à être au format JSON en ajoutant son type de contenu. Même s'il est codé en JSON , vous devrez peut-être le faire.
C’est la ligne de code que nous avons ajoutée:
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
));
}
Et c'est ce qui se passait sur le backend:
J'espère que cela peut aider d'une certaine manière. :)
Cela pourrait éventuellement être le cas avec votre test. Essaye ça.
Pour votre première option, pouvez-vous essayer d’ajouter cet en-tête et d’envoyer la demande?
.header("Accept","application/json")
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"));
}
}
Comme mentionné dans les messages précédents, il existe une méthode:
RequestSpecification.contentType(String value)
Je n'ai pas travaillé pour moi aussi. Mais après la mise à niveau vers la dernière version (en ce moment, la version 2.9.0), cela fonctionne. Alors s'il vous plaît mettre à jour :)