2014-11-17 12 views
7

Ich versuche, einen Ruheanruf mit Ruhe zu rufen. Meine API akzeptiert, "application/json" als Inhaltstyp und ich muss in den Anruf setzen. Ich habe den Inhaltstyp wie unten erwähnt festgelegt.Einstellung Inhaltstyp in Ruhe versichert

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

Die Reaktion I erhalten, ist "415" (zeigt an, dass "nicht unterstützten Medientyp").

Ich habe versucht, die gleiche API mit einfachen Java-Code aufrufen und es funktioniert. Aus irgendeinem mysteriösen Grund kann ich es nicht durch RA arbeiten lassen.

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

Wäre es möglich, die Anforderungsheader von Ihren 2 ersten Beispielen zu vergleichen, um Header aus dem letzten Beispiel anzufordern? – spg

+0

Option 1: Anforderungsmethode: \t POST Anforderungsweg: \t http: //10.75.43.46: 7001/supplierapp-Krieg/pim/addUser Anfrage params: \t Abfrage params: \t Formular params: \t Pfad params: \t Headers: \t \t Content-Type = application/json Cookies: \t \t Option 2: Anforderungsmethode: \t POST anfordern Pfad: \t http://10.75.43.46:7001/supplierapp-war/pim/addUser anfordern params: \t Abfrage params: \t Formular params: \t Pfad params: \t Headers: \t \t Content-Type = application/json Cookies: \t \t TechRookie

+0

Anfrage von Httpclient gesendet: Content Type: Content- Typ: application/json Länge des Inhalts: 203 Inhalt: [email protected] Inhalt Codierung: null Hinweis: Ich habe folgenden Ausschnitt verwendet, um Header-Informationen von httpClient zu erhalten. System.out.println ("Inhaltstyp:" + input.getContentType()); System.out.println ("Inhaltslänge:" + input.getContentLength()); System.out.println ("Inhalt:" + input.getContent()); System.out.println ("Inhaltscodierung:" + input.getContentEncoding()); – TechRookie

Antwort

1

Probieren Sie gegeben(). Content (ContentType.JSON) .body (inputPayLoad.toString)

0

für Ihre erste Option können Sie bitte diesen Header zu und sendet die Anfrage versuchen Sie?

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

7

ich ähnliches Problem konfrontiert, während sie mit Rest gesicherte Version 2.7 arbeiten. Ich habe versucht, sowohl den contentType einzustellen und auch zu application/json zu akzeptieren, aber es hat nicht funktioniert. Hinzufügen von Wagenvorschub und neuen Zeilenzeichen am Ende, wie das Folgende für mich funktionierte.

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

Die API scheint neue Zeile Zeichen nach Content-Type-Header zu fehlen hinzuzufügen, aufgrund denen der Server nicht in der Lage ist, zwischen dem Medientyp und dem Rest des Anforderungsinhaltes und damit wirft die Fehler 415 zu unterscheiden - "Nicht unterstützter Medientyp".

+0

Danke. Das hat für uns funktioniert. – Buddha

0

Wie in früheren Veröffentlichungen erwähnt gibt es eine Methode:

RequestSpecification.contentType(String value)

ich nicht zu für mich zu arbeiten. Aber nach dem Upgrade auf die neueste Version (in diesem Moment 2.9.0) funktioniert es. Also bitte upgraden :)

0

Hier ist das Complete POST exmaple mit CONTENT_TYPE als JSON.Hope wird Ihnen helfen.

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