2012-11-13 8 views
24

सभी संभावनाओं के बीच बनाम, मैं दो संभावनाएं है कि बराबर देखने के देखा है एक बाकी सेवा में ग्राहक के लिए एक प्रतिक्रिया वापस जाने के लिए।WebApplicationException रिस्पांस

परिणाम के समान होने पर एक संभावना का उपयोग क्यों करें? क्या यह REST फ्रेमवर्क से संबंधित है जो अपवादों और नियमित प्रतिक्रियाओं के बीच अलग-अलग प्रतिक्रिया करने के लिए कॉन्फ़िगर किया जा सकता है?

+1

मैं सफलता के मामलों की बजाय विफलता मामलों के लिए 'WebAplicationException' के रूप में देखता हूं। यदि आपके पास ऐसी विधि है जो सफलता के मामले में एक जेएक्सबी ऑब्जेक्ट को सामान्य रूप से वापस (कहें) वापस कर देगी, तो 'WebAplicationException' को फेंकने से विफलता मामले में किसी अन्य प्रकार के डेटा को वापस करने का एक तरीका प्रदान किया जाता है। लेकिन यदि सफलता के मामले में 'प्रतिक्रिया' वापस करने के लिए विधि घोषित की गई है तो अपवाद दृष्टिकोण की कम आवश्यकता है। –

+1

'प्रतिक्रिया' बनाम 'WebAplicationException' के कुछ विचारों के लिए [जर्सी दस्तावेज़] (http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e435) पर एक नज़र डालें। सफलता के लिए, हमेशा 'प्रतिक्रिया' का उपयोग करें। –

+0

@IanRoberts मैं इस तथ्य को समझता हूं कि आम तौर पर असफलताओं के लिए उपयोग किया जाता है और दूसरे सफलता परिदृश्यों के लिए उपयोग किया जाता है। लेकिन मेरा प्रश्न अधिक तकनीकी है यानी क्या इस बारे में कोई अंतर है कि फ्रेम अपवाद द्वारा प्रतिक्रिया या संसाधित कैसे किया जाता है यदि यह अपवाद है या नियमित प्रतिक्रिया है? (मैंने जर्सी टैग जोड़ा है)। –

उत्तर

22

परिणाम के बाद से एक संभावना का उपयोग क्यों करें?

शायद क्योंकि (जावा) प्रोग्रामर के रूप में आप अपवाद फेंकने के आदी हैं जब आवेदन के विशेष नियम टूट जाते हैं? कुछ स्ट्रिंग को किसी नंबर पर कनवर्ट करें और आपको NumberFormatException मिल सकता है, किसी सरणी में गलत इंडेक्स का उपयोग करें और आपको ArrayIndexOutOfBoundsException मिल जाता है, जो आपको अनुमति नहीं है और SecurityException आदि प्राप्त करता है। आप नियमित प्रतिक्रिया के दौरान अपवाद फेंकने के लिए उपयोग होते हैं "बनाया नहीं जा सकता है (गलत इनपुट या कुछ प्रोसेसिंग त्रुटि से हो)।

जब आप नियमित प्रतिक्रिया वापस नहीं कर सकते हैं, तो आपको ग्राहक को एक त्रुटि प्रतिक्रिया वापस करनी होगी। आप इसे अपवाद फेंकने या हाथ से प्रतिक्रिया बनाने के साथ कर सकते हैं। यह आपके क्लाइंट के लिए एक ही बात है, लेकिन यह आपके सर्वर साइड कोड के लिए एक ही बात नहीं है।

अपवाद फेंकना आपके कोड क्लीनर को आसान बनाता है, इस बारे में कारणों को आसान बनाता है और को समझना आसान बनाता है। विचार WebApplicationException को उपclass करना है और इसके अपने अर्थपूर्ण अपवादों को बनाना है (उदा। ProductNotFoundException extends WebApplicationException { ... }, AccessDeniedException extends WebApplicationException { ... } या exception mapper के साथ अपवादों का पुन: उपयोग करना)।

यह तो throw new ProductNotFoundException() या throw new AccessDeniedException() लिए क्लीनर है और ढांचे एक Response हर बार के निर्माण के बजाय इसे संभाल और बाद में इसे बनाने की क्या कोड के उस अनुभाग में क्या हो रहा है यह पता लगाने के लिए इस्तेमाल किया विवरण का पालन करते हैं।

+8

अपवाद फेंकने का एक और कारण है: यदि आप लेन-देन का उपयोग कर रहे हैं, तो यह कंटेनर को उस अनुरोध के भीतर आपके डेटा में किए गए किसी भी बदलाव को रोलबैक करने की अनुमति देता है। यदि आप केवल नियमित प्रतिक्रिया देते हैं, तो आपको इसका ध्यान रखना होगा। –

+0

आपका क्या मतलब है "ढांचे को इसे संभालने दें"? क्या आपके पास कोई लेख है जिसका मैं उल्लेख कर सकता हूं कि यह कैसे काम करता है? धन्यवाद। – Cacheing

+0

@ कैशिंग: [जेएक्स-आरएस चश्मा] (http://download.oracle.com/otndocs/jcp/jaxrs-1।1-mrel-eval-oth-JSpec /) उल्लेख करें कि WebAplicationException को कैसे प्रबंधित किया जाना चाहिए। आप चश्मे में वर्णित अपवाद मैपिंग प्रदाता भी पंजीकृत कर सकते हैं। – Bogdan

संबंधित मुद्दे