जावा वेब सेवाओं पर रिटर्निंग त्रुटि

मेरे पास इस तरह की एक कक्षा है:

@Override
public StudentDTO getStudent(@WebParam(name = "name") String studentName) {
    StudentDTO student = new StudentDTO();
    try {
        student = studentService.findStudentByName(studentName);
    } catch (Exception e) {
        return new ErrorActionResponse("student couldn't find by name");
    }
    return student;
}

सामान्य रूप से यह काम नहीं करता है क्योंकि वापसी प्रकार StudentDTO है और मैं किसी अन्य प्रकार की कक्षा को वापस करने का प्रयास करता हूं: ErrorActionResponse । ErrorActionResponse एक त्रुटि वर्ग है जिसमें त्रुटि के बारे में विस्तृत जानकारी है।

मैं अपनी वेब सेवा आर्किटेक्चर कैसे डिज़ाइन कर सकता हूं जो त्रुटि स्थितियों को संभाल सकता है? (मेरे आरईएसटी आर्किटेक्चर पर मैं प्रतिक्रिया में त्रुटि जानकारी लिखता हूं और क्लाइंट साइड में त्रुटि भेजता हूं)

0
जोड़ा
विचारों: 1

2 उत्तर

कम से कम प्रभाव के लिए मैं सुझाव देता हूं: सेटर और गेटर विधियों के साथ StudentDTO के एक निजी सदस्य के रूप में ErrorActionResponse बनाएं। सेवा में, जब कोई अपवाद होता है, तो ErrorActionResponse को तत्काल करें और StudentDTO के सदस्य में सेट करें। इसलिए, क्लाइंट को पहले जांचना होगा कि getErrorActionResponse() null लौटाता है या नहीं। यदि ऐसा है, तो सामान्य प्रसंस्करण करें, अपवाद केस को संभालें।

कक्षा छात्र डीटीओ:

public class StudentDTO {

    ...
    private ErrorActionResponse errorActionResponse;
    ...

    public ErrorActionResponse getErrorActionResponse() {
        return errorActionResponse;
    }

    public void setErrorActionResponse( ErrorActionResponse errorActionResponse ) {
        this.errorActionResponse = errorActionResponse;
    }

}

सर्विस:

@Override
public StudentDTO getStudent(@WebParam(name = "name") String studentName) {
    StudentDTO student = new StudentDTO();
    try {
        student = studentService.findStudentByName(studentName);
    } 
    catch (Exception e) {
        student.setErrorActionResponse( new ErrorActionResponse("student couldn't find by name") );
    }
    finally {
        return student;
    }
}

क्लाइंट कोड:

if( student.getErrorActionResponse() == null ) {
   //do normal processing
}
else {
   //handle exception case
}

उपर्युक्त मामले में, डीटीओ में ErrorActionResponse सदस्य है जो इसके मूलभूत स्थिति से संबंधित नहीं है। इसलिए, क्लीनर दृष्टिकोण के लिए, मैं आपको एडाप्टर पैटर्न पर विचार करने का सुझाव देता हूं।

0
जोड़ा
यदि मैं छात्रों की सूची वापस करने का प्रयास करता हूं तो मुझे सूची में सभी छात्र की त्रुटिActionResponse सेट करने की आवश्यकता होगी
जोड़ा लेखक kamaci, स्रोत
मैं सहमत हूँ। मेरा पहला सुझाव आपकी ओपी आवश्यकता के लिए था - विधि जो छात्र को लौटाती है, न कि एक सूची (जिसे आप अभी बता रहे हैं)।
जोड़ा लेखक mnmopazem, स्रोत

यदि आप संग्रह (जैसा कि मेरे पिछले उत्तर में टिप्पणी में बताया गया है) वापस करना चाहते हैं, तो मेरा सुझाव है कि आप दो कुंजी के साथ एक मानचित्र बनाएं। यदि कोई अपवाद नहीं है, तो पहले की-मूल्य वाली जोड़ी में क्रमशः "छात्र" स्ट्रिंग और StudentDTO संग्रह होगा। और, दूसरी कुंजी-मूल्य जोड़ी में क्रमशः "अपवाद" स्ट्रिंग और शून्य मान होगा। यदि कोई अपवाद है, तो पहले की-मूल्य वाली जोड़ी में क्रमशः "छात्र" स्ट्रिंग और शून्य मान होगा। और, दूसरी कुंजी-मूल्य जोड़ी क्रमशः "अपवाद" स्ट्रिंग और ErrorActionResponse ऑब्जेक्ट होगी। उदाहरण:

कोई अपवाद नहीं है:

Map result = new HashMap();
result.put( "students", COLLECTION_OF_STUDENTS );
result.put( "exception", null );

कोई अपवाद नहीं है:

Map result = new HashMap();
result.put( "students", null );
result.put( "exception", ErrorActionResponse_OBJECT );

उम्मीद है की यह मदद करेगा...

0
जोड़ा