我试图用放心的方式调用休息电话。我的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);
}
答案 0 :(得分:9)
我在使用可靠的2.7版本时遇到了类似的问题。我尝试设置contentType并同时接受application / json,但它没有工作。最后添加了回车符和换行符,如下所示。
RestAssured.given().contentType("application/json\r\n")
在Content-Type标头之后添加新行字符似乎缺少API,因为服务器无法区分媒体类型和其他请求内容,因此抛出错误415 - &#34 ;不支持的媒体类型"。
答案 1 :(得分:1)
试一试 给定的()。contentType中(ContentType.JSON)。体(inputPayLoad.toString)
答案 2 :(得分:1)
以下是使用CONTENT_TYPE作为JSON的完整POST例子。希望它可以帮到你。
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 :(得分:0)
对于您的第一个选项,您可以尝试添加此标题并发送请求吗?
.header("Accept","application/json")
答案 4 :(得分:0)
如前所述,有一种方法:
RequestSpecification.contentType(String value)
我也没有为我工作。但升级到最新版本(在这一刻2.9.0)之后就可以了。所以请升级:)
答案 5 :(得分:0)
我正面临着类似的事情,一段时间后,我们发现问题实际上出在服务器端。请检查您对Postman的呼叫,看看是否在触发它时需要将其从HTML更改为JSON。如果需要这样做,后端可能需要通过添加其内容类型来强制响应采用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
));
}
这就是后端发生的事情:
希望可以有所帮助。 :)
答案 6 :(得分:0)
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"));
}
}
答案 7 :(得分:0)