2014-11-17 8 views
7

मैं बाकी आश्वासन का उपयोग करके एक बाकी कॉल का आह्वान करने की कोशिश कर रहा हूं। मेरा एपीआई "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" है (इंगित करता है कि "असमर्थित मीडिया प्रकार")।

मैंने सादा जावा कोड का उपयोग करके एक ही एपीआई का आह्वान करने की कोशिश की और यह काम करता है। कुछ रहस्यमय कारणों के लिए, मैंने इसे आरए के माध्यम से काम नहीं किया।

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 पोस्ट अनुरोध पथ: \t http: //10.75.43।46: 7001/supplierapp युद्ध/पीआईएम/adduser अनुरोध पैरामीटर: \t क्वेरी पैरामीटर: \t फार्म पैरामीटर: \t पथ पैरामीटर: \t हेडर: \t \t सामग्री प्रकार = आवेदन/json कुकीज़: \t \t विकल्प 2: अनुरोध विधि: \t पोस्ट अनुरोध पथ: \t http://10.75.43.46:7001/supplierapp-war/pim/addUser अनुरोध पैरामीटर: \t क्वेरी पैरामीटर: \t फार्म पैरामीटर: \t पथ पैरामीटर: \t हेडर: \t \t सामग्री प्रकार = आवेदन/json कुकीज़: \t \t TechRookie

+0

अनुरोध HttpClient द्वारा भेजे गए: सामग्री प्रकार: सामग्री- टाइप: एप्लिकेशन/जेसन सामग्री की लंबाई: 203 सामग्री: [email protected] सामग्री एन्कोडिंग: शून्य नोट: मैंने httpClient से शीर्षलेख जानकारी प्राप्त करने के लिए निम्न स्निपेट का उपयोग किया। System.out.println ("सामग्री का प्रकार:" + input.getContentType()); System.out.println ("सामग्री की लंबाई:" + input.getContentLength()); System.out.println ("सामग्री:" + input.getContent()); System.out.println ("सामग्री एन्कोडिंग:" + input.getContentEncoding()); – TechRookie

उत्तर

1

एक कोशिश दिया()। ContentType (ContentType.JSON) .body (inputPayLoad.toString)

0

आपका पहला विकल्प आप भी इस हेडर को जोड़े और अनुरोध भेजने के प्रयास करें कर सकते हैं के लिए दे दो?

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

7

मैं वही समस्या का सामना करना पड़ा आराम का आश्वासन दिया 2.7 संस्करण के साथ काम करते हुए। मैंने दोनों सामग्री टाइप करने की कोशिश की और एप्लिकेशन/जेसन को भी स्वीकार किया लेकिन यह काम नहीं किया। अंत में कैरिज फ़ीड और नए लाइन वर्ण जोड़ना क्योंकि मेरे लिए निम्नलिखित काम किया।

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

एपीआई जिसके कारण सर्वर मीडिया प्रकार और अनुरोध की शेष सामग्री और इसलिए त्रुटि 415 फेंकने के बीच अंतर करने में सक्षम नहीं है Content-Type हैडर के बाद नए लाइन वर्ण जोड़ने के लिए याद किया जा रहा है - "असमर्थित मीडिया प्रकार"।

RequestSpecification.contentType(String value)

मैं मेरे लिए बहुत काम नहीं किया:

+0

धन्यवाद। यह हमारे लिए काम किया। – Buddha

0

पिछले पोस्ट में उल्लेख किया है कि वहाँ एक तरीका है। लेकिन नवीनतम संस्करण में अपग्रेड करने के बाद (इस पल में 2.9.0) यह काम करता है। तो कृपया अपग्रेड करें :)

0

यहां CONTENT_TYPE का उपयोग JSON के रूप में पूर्ण पोस्ट exmaple है। यह आपकी मदद करेगा।

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(); 
} 
संबंधित मुद्दे