2014-11-17 16 views
7

Tôi đang cố gọi một cuộc gọi còn lại bằng cách sử dụng phần còn lại được đảm bảo. API của tôi chấp nhận, "application/json" làm loại nội dung và tôi cần phải đặt trong cuộc gọi. Tôi đặt loại nội dung như được đề cập bên dưới.đặt loại nội dung ở trạng thái yên tâm

Lựa chọn 1

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

Lựa chọn 2

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

Câu trả lời tôi nhận được là "415" (chỉ ra rằng "loại phương tiện không được hỗ trợ").

Tôi đã thử gọi cùng một api bằng cách sử dụng mã java đơn giản và nó hoạt động. Đối với một số lý do bí ẩn, tôi cudn't làm cho nó làm việc thông qua 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

Bạn có thể so sánh tiêu đề yêu cầu từ 2 ví dụ đầu tiên của mình để yêu cầu tiêu đề từ ví dụ sau không? – spg

+0

Tùy chọn 1: Phương thức yêu cầu: \t POST Đường dẫn yêu cầu: \t http: //10.75.43.46: 7001/supplierapp chiến tranh/pim/adduser Yêu cầu params: \t Query params: \t params Mẫu: \t params Đường dẫn: \t Headers: \t \t Content-Type = application/json Cookies: \t \t phương án 2: Yêu cầu phương pháp: \t POST Yêu cầu đường dẫn: \t http://10.75.43.46:7001/supplierapp-war/pim/addUser Yêu cầu params: \t params truy vấn: \t Mẫu params: \t params Đường dẫn: \t Headers: \t \t Content-Type = application/json Cookies: \t \t TechRookie

+0

Yêu cầu được gửi bởi HttpClient: Content Type: trang nội dung Loại: application/json Độ dài nội dung: 203 Nội dung: [email protected] nội dung Mã hóa: null Lưu ý: Tôi đã sử dụng đoạn mã sau để lấy thông tin tiêu đề từ httpClient. System.out.println ("Loại nội dung:" + input.getContentType()); System.out.println ("Độ dài nội dung:" + input.getContentLength()); System.out.println ("Nội dung:" + input.getContent()); System.out.println ("content Encoding:" + input.getContentEncoding()); – TechRookie

Trả lời

1

tặng một thử nhất định(). ContentType (ContentType.JSON) .body (inputPayLoad.toString)

0

Đối với tùy chọn đầu tiên của bạn, bạn có thể vui lòng thử thêm tiêu đề này quá và gửi yêu cầu?

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

7

Tôi gặp vấn đề tương tự khi làm việc với phiên bản 2.7 yên tâm. Tôi đã thử đặt cả contentType và cũng chấp nhận ứng dụng/json nhưng nó không hoạt động. Thêm nguồn cấp dữ liệu vận chuyển và ký tự dòng mới ở cuối như sau đây làm việc cho tôi.

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

API có vẻ là thiếu để thêm ký tự dòng mới sau Content-Type tiêu đề do mà máy chủ không có khả năng phân biệt giữa các loại phương tiện truyền thông và phần còn lại của nội dung yêu cầu và do đó ném lỗi 415 - "Loại phương tiện không được hỗ trợ".

+0

Cảm ơn. Điều này làm việc cho chúng tôi. – Buddha

0

Như đã đề cập trong bài viết trước đây có một phương pháp:

RequestSpecification.contentType(String value)

Tôi không làm việc cho tôi quá. Nhưng sau khi nâng cấp lên phiên bản mới nhất (trong thời điểm này 2.9.0) nó hoạt động. Vì vậy, hãy nâng cấp :)

0

Dưới đây là toàn bộ sơ đồ POST bằng cách sử dụng CONTENT_TYPE là JSON.Hope nó sẽ giúp bạn.

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(); 
} 
Các vấn đề liên quan