2012-11-28 15 views
5

के लिए अपवादों को कैसे संभालें I Spark Framework के साथ पकड़ने के लिए मिल रहा है और मैं एकाधिक मार्गों के लिए एक समान तरीके से अपवादों को संभालने का सबसे अच्छा तरीका समझने की कोशिश कर रहा हूं।एकाधिक रूट

... 
catch (final Exception e) { 
    ... 
    response.status(418); 
    return e.getMessage(); 
} 
... 

यह छोड़ देता है एक बहुत वांछित होने के लिए, मुख्य रूप से अपवाद तर्क उन दोनों के बीच दोहराया जाता है:

फिलहाल मैं मार्गों की एक संख्या है जो की तर्ज पर सभी संभाल अपवाद होते हैं। मुझे पता है कि यह रिफैक्टरिंग द्वारा सुधार किया जा सकता है, लेकिन वहाँ वसंत में ExceptionHandler तंत्र जब किसी विशेष अपवाद फेंक दिया जाता है, जहां आप एक कार्यवाही नहीं कर सकता, जैसे करने के लिए कुछ इसी तरह अगर मैं सोच रहा था:

@ExceptionHandler(Exception.class) 
public void handleException(final Exception e, final HttpServletRequest request) { 
    ...executed for the matching exception... 
} 

तो, है वहाँ एक अपवाद हैंडलिंग के लिए स्पार्क-एस्क्यू तंत्र? मैंने प्रलेखन की जांच की है और कम आ गया है। यदि ऐसा नहीं है, तो मैं अपनी रिफैक्टरिंग योजनाओं के साथ आगे बढ़ जाऊंगा। धन्यवाद।

+0

@ डेविड 99वर्ल्ड टैग [स्पार्क] का विवरण इस नए स्पार्क ढांचे के साथ कुछ लेना देना नहीं है। टैग को फिर से परिभाषित करने की आवश्यकता है या इसके लिए एक नया टैग बनाया जाना चाहिए। –

+0

@ david99world मैंने 'स्पार्क-फ्रेमवर्क' टैग जोड़ने की कोशिश की लेकिन मेरे पास पर्याप्त प्रतिनिधि नहीं था, मुझे लगता है कि 1.5k की आवश्यकता है। – Jonathan

उत्तर

7

तुम इतनी तरह अपवाद संभाल कर सकते हैं:

get("/throwexception", (request, response) -> { 
    throw new NotFoundException(); 
}); 

exception(NotFoundException.class, (e, request, response) -> { 
    response.status(404); 
    response.body("Resource not found"); 
}); 

उदाहरण Spark docs से लिया।

0

मैं इस मुद्दे से निपट रहा हूं। मैंने ये ढूंढ निकाला। इसे आपके पर्यावरण में ट्विकिंग की आवश्यकता होगी।

public class ExceptionHandler extends MustacheTemplateHandler 
{ 
private final WrappedHandler inter; 

public abstract static class WrappedHandler 
{ 
    public abstract Object handle(Request req, Response res);  
} 

public static ExceptionHandler wrap(String path, WrappedHandler internal) 
{ 
    return new ExceptionHandler(path, internal); 
} 

private ExceptionHandler(String path, WrappedHandler internal) 
{ 
    super(path); 
    inter = internal; 
} 

@Override 
public Object handle(Request req, Response res) 
{ 
    try 
    { 
     return inter.handle(req, res); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     return new ModelAndView(e, "errors"); 
    } 
} 
} 

और उसके बाद (आयात का उपयोग कर स्थिर):

get(wrap("/download", new DownloadHandler())); 
    post(wrap("/upload", new UploadHandler())); 
+0

हाय @ डैन मैं यह जानना चाहता हूं कि इस काम को पाने के लिए आपको अपने पर्यावरण में अन्य बदलावों की आवश्यकता है क्योंकि मैं एक ही समस्या में आया हूं। –

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