मैं इस प्रकार RESTEasy का उपयोग कर एक साधारण ग्राहक है:RESTEasy ग्राहक अपवाद हैंडलिंग
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;
}
}
सर्वर एक उपयोगी संदेश के साथ http://localhost/test
पर एक 400 - Bad Request
वापस जाने के लिए कॉन्फ़िगर किया गया है। BadRequestException
को ClientProxy
द्वारा फेंक दिया जा रहा है। try/catch
में लपेटने के अलावा, मैं getTest()
अपवाद को कैसे पकड़ सकता हूं और एक स्ट्रिंग के रूप में प्रतिक्रिया के सहायक संदेश को वापस कर सकता हूं। मैंने विभिन्न ClientExceptionMapper
कार्यान्वयन की कोशिश की, लेकिन ऐसा लगता है कि यह सही हो सकता है। उपर्युक्त कोड कभी भी toException
पर कॉल नहीं करता है। मुझे यहां क्या समझ नहीं आ रहा है?
मेरा वर्तमान कार्य-आसपास ClientResponseFilter
का उपयोग करना है और फिर setStatus(200)
करें और प्रतिक्रिया इकाई में मूल स्थिति को भरें। इस तरह मैं अपवाद फेंकता से बचें।
क्या आप समझ सकते हैं कि "सर्वर 400 - खराब अनुरोध वापस करने के लिए कॉन्फ़िगर किया गया है"? मेरा विचार यह है कि 'MyProxy.getTest() 'के कार्यान्वयन को वास्तव में एक अपवाद फेंकना चाहिए जिसमें एक उपयोगी संदेश है। फिर आप एक अपवाद मैपर का उपयोग 400 के लिए अपवाद को मैप करने के लिए करेंगे - खराब अनुरोध प्रतिक्रिया (और आप संदेश को प्रतिक्रिया के शरीर के रूप में शामिल कर सकते हैं)। – FGreg
मेरे प्रश्न की पहली वाक्य पढ़ें। मैं एक ग्राहक लिख रहा हूं, सर्वर नहीं। – gogators