2014-11-17 3 views
7

Я пытаюсь вызвать вызов для отдыха, используя все остальное. Мой 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" (указывает на то, что "Неподдерживаемый тип носителя").

Я пробовал использовать тот же api, используя простой Java-код, и он работает. По какой-то загадочной причине я не получаю ее через 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

Можно ли сравнить заголовки запросов из ваших 2 первых примеров, чтобы запросить заголовки из последнего примера? – spg

+0

Вариант 1: Способ запроса: \t POST Путь запроса: \t http: //10.75.43.46: 7001/supplierapp войны/ПИМ/AddUser Запрос Титулы: \t Параметры запроса: \t Форма PARAMS: \t Путь PARAMS: \t Заголовки: \t \t Content-Type = применение/JSON Cookies: \t \t Вариант 2: метод запроса: \t POST Запрос путь: \t http://10.75.43.46:7001/supplierapp-war/pim/addUser Запрос PARAMS: \t параметры запроса: \t Форма PARAMS: \t Путь PARAMS: \t Заголовки: \t \t Content-Type = применение/JSON Печенье: \t \t TechRookie

+0

Запрос посланный HttpClient: Content Type: Content- Тип: application/json Содержание Длина: 203 Содержимое: [email protected] Содержимое Кодировка: null Примечание: Я использовал следующий фрагмент, чтобы получить информацию заголовка от httpClient. System.out.println («Тип контента:» + input.getContentType()); System.out.println («Content Length:» + input.getContentLength()); System.out.println («Содержимое:» + input.getContent()); System.out.println ("content Encoding:" + input.getContentEncoding()); – TechRookie

ответ

1

Дайте попробовать данную(). CONTENTTYPE (ContentType.JSON) .Body (inputPayLoad.toString)

0

для вашего первого варианта вы можете, пожалуйста, попробуйте добавить этот заголовок слишком и отправить запрос?

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

7

я столкнулся с аналогичной проблемой при работе с отдыхом гарантированного 2.7 версии. Я попробовал установить как contentType, так и принять приложение/json, но это не сработало. Добавление корма каретки и новых символов линии в конце, поскольку следующее работало для меня.

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

API-интерфейс, кажется, отсутствует, чтобы добавить символы новой строки после заголовка Content-Type, благодаря которым сервер не способен различать тип носителя и остального содержимого запроса и, следовательно, метание ошибки 415 - «Неподдерживаемый тип носителя».

+0

Спасибо. Это сработало для нас. – Buddha

0

Как уже упоминалось в предыдущих постах есть метод:

RequestSpecification.contentType(String value)

Я не работал для меня тоже. Но после перехода на новую версию (в этот момент 2.9.0) он работает. Поэтому, пожалуйста, обновите :)

0

Вот полный пример POST, используя CONTENT_TYPE как JSON.Hope, это поможет вам.

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