2014-11-17 17 views
7

Sto provando a richiamare una chiamata di riposo usando resto assicurato. La mia API accetta, "application/json" come tipo di contenuto e ho bisogno di impostare la chiamata. Ho impostato il tipo di contenuto come indicato di seguito.impostazione tipo di contenuto in riposo assicurato

Opzione 1

Response resp1 = given().log().all().header("Content-Type","application/json") 
    .body(inputPayLoad).when().post(addUserUrl); 
System.out.println("Status code - " +resp1.getStatusCode()); 

Opzione 2

Response resp1 = given().log().all().contentType("application/json") 
    .body(inputPayLoad).when().post(addUserUrl); 

La risposta che ottengo è "415" (indica che "tipo di supporto non supportato").

Ho provato a invocare la stessa API usando il semplice codice Java e funziona. Per qualche misterioso motivo, non riesco a farlo funzionare attraverso 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

Sarebbe possibile confrontare le intestazioni delle richieste dai primi 2 esempi per richiedere le intestazioni dall'ultimo esempio? – spg

+0

Opzione 1: Metodo di richiesta: \t POST Percorso richiesta: \t http: //10.75.43.46: 7001/supplierapp-guerra/pim/adduser Richiesta params: \t parametri di query: \t params Forma: \t params Percorso: \t intestazioni: \t \t Content-Type = application/json Cookies: \t \t Opzione 2: metodo di richiesta: \t POST richiesta di traccia: \t http://10.75.43.46:7001/supplierapp-war/pim/addUser Richiesta params: \t params query: \t params Forma: \t params Percorso: \t intestazioni: \t \t Content-Type = application/json Cookies: \t \t TechRookie

+0

richiesta inviata dal HttpClient: Contenuto: Content- Tipo: application/json Lunghezza contenuto: 203 Contenuto: [email protected] contenuto Codifica: null Nota: Ho usato il seguente snippet per ottenere informazioni sull'intestazione da httpClient. System.out.println ("Tipo di contenuto:" + input.getContentType()); System.out.println ("Lunghezza contenuto:" + input.getContentLength()); System.out.println ("Contenuto:" + input.getContent()); System.out.println ("codifica del contenuto:" + input.getContentEncoding()); – TechRookie

risposta

1

Dare un dato. ContentType (ContentType.JSON) .body prova () (inputPayLoad.toString)

0

per la vostra prima opzione potete per favore provare ad aggiungere questa intestazione troppo e inviare la richiesta?

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

7

ho affrontato problema simile mentre si lavora con la versione di riposo ha assicurato 2.7. Ho provato a impostare sia contentType che ad accettare l'applicazione/json ma non ha funzionato. Aggiunta di feed di trasporto e caratteri di nuova riga alla fine come i seguenti hanno funzionato per me.

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

L'API sembra mancare di aggiungere nuovi personaggi linea dopo header Content-Type a causa della quale il server non è in grado di distinguere tra il tipo di supporto e il resto del contenuto della richiesta e, quindi, gettando l'errore 415 - "Tipo di supporto non supportato".

+0

Grazie. Questo ha funzionato per noi. – Buddha

0

Come accennato nel post precedente c'è un metodo:

RequestSpecification.contentType(String value)

Non ho lavorato anche per me. Ma dopo l'aggiornamento alla versione più recente (in questo momento 2.9.0) funziona. Quindi, per favore aggiorna :)

0

Ecco l'exmaple POST completo che utilizza CONTENT_TYPE come JSON. Ciò ti aiuterà.

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