2013-03-03 47 views
7

Tôi đang sử dụng mã này để gọi dịch vụ JAX-RS jersey sử dụng ứng dụng khách áo.JAX-RS jersey Khách hàng: Đọc phản hồi với mã trạng thái

public static void main(String[] args) { 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 

    WebResource service = client.resource(getBaseURI()); 

    String msg = service.path("rest").path("ExceptionDemo").path("user").queryParam("id", "001").get(String.class);  
    System.out.println(msg); 

} 

private static URI getBaseURI() { 
    return UriBuilder.fromUri("http://localhost:8045/ExceptionHanlding").build(); 
} 

Mã này hoạt động tốt khi mã trạng thái Response là 200. Nhưng đối với bất kỳ điều gì khác ngoài 200, mã này sẽ đưa ra ngoại lệ.

Cách sửa đổi mã này để dựa trên mã trạng thái của phản hồi, nó thực hiện một số hành động?

Trả lời

12

Sử dụng .get(ClientResponse.class) thay vì .get(String.class). Điều đó ngăn chặn hành vi "ngoại lệ về trạng thái xấu" và ClientResponse cung cấp cho bạn quyền truy cập vào chi tiết về phản hồi HTTP. Hành vi được mô tả ngắn gọn trong hướng dẫn sử dụng theo "Receiving a response".

+0

Cảm ơn bạn đã trả lời, nó đã giải quyết được sự cố của tôi. Tôi có thể thấy trong liên kết mà họ không sử dụng nó: 'EntityTag e = response.getEntityTag();'. cái này dùng như thế nào? – WhoAmI

+0

Đặt một thời gian ngắn, thẻ thực thể xác định duy nhất hoặc gần duy nhất một cơ thể phản hồi để cho phép bộ nhớ đệm tốt hơn. Đọc thêm trong [HTTP spec] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11) hoặc trên [Wikipedia] (http://en.wikipedia.org/wiki/HTTP_ETag). –

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