2013-07-09 34 views
5

HI Tôi đã cố gắng gọi REST POST API bằng cách sử dụng REST REST của máy khách. API là tài liệu là URL: PHƯƠNG PHÁP: POST Tiêu đề Thông tin: - X-GWS-APP-NAME: XYZ Chấp nhận: application/json hoặc application/xmlĐặt kiểu nội dung/mã hóa trong Ứng dụng khách REST Jersey

mẫu Jersey mã khách hàng của tôi là

Client client = Client.create(); 

WebResource resource=client.resource(URL); 

resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML); 
resource.type(javax.ws.rs.core.MediaType.APPLICATION_XML); 
resource.type("charset=utf-8"); 
ClientResponse response = resource.post(ClientResponse.class,myReqObj); 

Tôi đã thử biến thể mã này kể từ 1 tuần trước và nó không hoạt động. Bất kỳ trợ giúp trong lĩnh vực này được đánh giá cao.

Trả lời

7

Phần khó khăn là các phương thức WebResource tuân theo mẫu thiết kế Builder để nó trả về đối tượng Builder mà bạn cần bảo toàn và tiếp tục khi bạn gọi thêm các phương thức để đặt ngữ cảnh đầy đủ của yêu cầu.

Khi bạn thực hiện resource.accept, nó trả về thứ bạn không lưu trữ, vì vậy nó bị mất khi bạn thực hiện resource.type và do đó chỉ cuộc gọi cuối cùng mới có hiệu lực.

Bạn thường đặt tất cả các tiêu chí trong một dòng, nhưng bạn cũng có thể lưu đầu ra trong biến cục bộ.

ClientResponse response = client.resource(URL) 
           .accept(MediaType.APPLICATION_XML) 
           .type(MediaType.APPLICATION_XML) 
           .post(ClientResponse.class,myReqObj); 
+2

Tôi nghĩ rằng bạn cần phải loại bỏ các dấu chấm phẩy từ tận cùng chấp nhận và loại dòng. – FrontierPsycho

+0

sao chép/dán lạm dụng. :) nó đã được sửa rồi. cảm ơn! – TheArchitect

+0

Bạn được chào đón và cảm ơn :) – FrontierPsycho

1

Tôi thích điều đó.

Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) 
    .accept(MediaType.APPLICATION_JSON_TYPE) 
    .post(Entity.entity(a, "application/json; charset=UTF-8")); 

đây, 'a' là lớp tài khoản dụ mà như

@XmlRootElement 
public class account { 
... 
... 
} 
+0

Đây có phải là dành cho Jersey 2 không? Có vẻ như ... bất thường, có lẽ bạn có thể mở rộng câu trả lời một chút? – Nenotlep

Các vấn đề liên quan