Tôi có một khách hàng đơn giản sử dụng RESTEasy như sau:RESTEasy Khách hàng Exception Handling
public class Test {
public static void main(String[] args) {
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://localhost");
client.register(new MyMapper());
MyProxy proxy = target.proxy(MyProxy.class);
String r = proxy.getTest();
}
}
public interface MyProxy {
@GET
@Path("test")
String getTest();
}
@Provider
public class MyMapper implements ClientExceptionMapper<BadRequestException>{
@Override
public RuntimeException toException(BadRequestException arg0) {
// TODO Auto-generated method stub
System.out.println("mapped a bad request exception");
return null;
}
}
Các máy chủ được cấu hình để trả lại một 400 - Bad Request
trên http://localhost/test
cùng với một thông điệp hữu ích. A BadRequestException
đang được ném bởi ClientProxy
. Khác với gói trong try/catch
, làm cách nào tôi có thể thực hiện getTest()
bắt ngoại lệ và trả lại thông báo hữu ích của Trả lời dưới dạng chuỗi. Tôi đã thử nhiều triển khai ClientExceptionMapper
khác nhau, nhưng dường như có thể làm cho nó đúng. Mã trên không bao giờ gọi toException
. Tôi đang thiếu gì ở đây?
Công việc hiện tại của tôi xung quanh là sử dụng ClientResponseFilter
và sau đó thực hiện setStatus(200)
và đặt nội dung gốc vào thực thể phản hồi. Bằng cách này tôi tránh các ngoại lệ ném.
Bạn có thể giải thích ý của mình bằng "Máy chủ được định cấu hình trả về yêu cầu 400 - không hợp lệ" không? Suy nghĩ của tôi là việc thực hiện 'MyProxy.getTest()' thực sự nên ném một ngoại lệ có chứa một thông báo hữu ích. Sau đó, bạn sẽ sử dụng một ExceptionMapper để ánh xạ ngoại lệ đó tới một phản hồi 400 - Bad Request (và bạn có thể bao gồm thông điệp như là phần thân của phản hồi). – FGreg
Đọc câu đầu tiên của câu hỏi của tôi. Tôi đang viết một khách hàng chứ không phải máy chủ. – gogators