2012-03-22 24 views
6

Làm cách nào để thêm tiêu đề của riêng tôi vào yêu cầu được bao bọc bởi ClientResource trong Restlet? Ví dụ, tôi đã đọc mà bạn có thể sử dụng sau khi làm việc trực tiếp với Client:Thêm tiêu đề để yêu cầu được gói bởi ClientResource trong Restlet

Form headers = (Form) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS); 
if (headers == null) { 
headers = new Form(); 
request.getAttributes().put("org.restlet.http.headers", responseHeaders); 
} 
headers.add("X-Some-Header", "the value"); 

Tuy nhiên, tôi về cơ bản sau mã được cung cấp trong hướng dẫn của họ và tôi không biết mà thành viên của ClientResource nên được truy cập để đặt tiêu đề:

ClientResource clientResource = new ClientResource("http://webserviceurl"); 

MyClassResource classResource = clientResource.wrap(classResource.class); 

MyClass class; 

try { class = resource.retrieve(); } catch (Exception e) { System.out.println("fail."); } 

Tôi có thể làm gì để sửa đổi retrieve() để thêm một số tiêu đề?

Trả lời

13

Phương pháp ClientResource có phương thức getRequestAttributes là lối tắt cho: getRequest().getAttributes().

Vì vậy, bạn có thể sử dụng nó để xác định tiêu đề tùy chỉnh của bạn cho yêu cầu, như mô tả dưới đây:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getRequestAttributes().get(
           "org.restlet.http.headers"); 
headers.set("<header-name>", "<header-value>"); 

Hãy nhận biết rằng hầu hết các tiêu đề được quản lý bởi Restlet theo mặc định. Để xem tiêu đề nào được hỗ trợ, hãy xem lớp HeaderUtils: https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/engine/header/HeaderUtils.java.

Edited

Với phiên bản mới nhất của Restlet (2.3), một phương pháp getHeaders đã được bổ sung:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getHeaders(); 
headers.set("<header-name>", "<header-value>"); 

này tương ứng với tiêu đề tùy chỉnh.

Hy vọng nó sẽ giúp bạn. Thierry

+0

tôi nhận được lỗi sau với mã này: Loại không phù hợp : không thể chuyển đổi từ Object thành Series

ademar111190

+4

Với phiên bản 2.1.2: Dòng

tiêu đề = (Series
) res.getRequestAttributes(). get ("org.restlet.http.headers"); nếu (tiêu đề == null) { tiêu đề = new Series
(Tiêu đề.class); } tiêu đề.add ("người dùng", "abcd1"); tiêu đề.add ("mật khẩu", "chào mừng"); –

+0

@ thierry-templier xin lỗi khi được tham gia vào cuộc trò chuyện này nhưng bạn có thể giúp tôi trong http://stackoverflow.com/questions/35383763/how-to-get-mediatype-from-request này – xybrek

2

Nếu bạn đang sử dụng Restlet 2.0.x (phiên bản ổn định mới nhất), bạn cần phải làm điều này:

ClientResource resource = new ClientResource(yourUrl); 
Form headers = (Form)resource.getRequestAttributes().get("org.restlet.http.headers"); 
if (headers == null) { 
    headers = new Form(); 
    resource.getRequestAttributes().put("org.restlet.http.headers", headers); 
} 
headers.add("yourHeaderName", yourHeaderValue); 
resource.get(); 
Response response = resource.getResponse(); 
String text = response.getEntity().getText(); 
String status = response.getStatus().toString();