2016-05-23 9 views
0

Dies ist meine Controller-KlasseAusnahmebehandlung Rahmen im Frühjahr java

@RequestMapping(value = "/profile/MyLink.do", method = RequestMethod.POST) 
public void MyLink(HttpServletRequest request, 
     HttpServletResponse response, @RequestBody String data) 
       throws JSONException { 


     JSONObject profile = null; 
     try { 
      profile = new JSONObject(data.toString()); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      System.out.println(e1.getMessage()); 
     } 
     // Some code 

     // calling the DAO method from where the exception will be thrown. 
     } catch (Exception e) { 

      // checking the thrown message from method 
      if(e.getMessage() != null && e.getMessage().length() > 0){ 
       logger.info("Printing the error message " + e.getMessage()); 

       JsonReader reader = new JsonReader(new StringReader(e.getMessage())); 
       reader.setLenient(true); 

       //creating Java Object from the thrown message 
       objException = gson.fromJson(reader, ExceptionBean.class); 
      } 

      returnProfile.setError("error"); 

      if(objException != null) 
       returnProfile.setObjException(objException); 
      //e.printStackTrace(); 
     } 


    strReturnJsonString = gson.toJson(returnProfile); 

    PrintWriter pw = null; 
    try { 
     pw = response.getWriter(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    pw.write(strReturnJsonString.trim()); 
    pw.flush(); 
    pw.close(); 
}        

Ich bin die ausgelöste Ausnahme hier in catch-Block zu bekommen.

Als nächstes ist meine DAO-Klasse, wo Ausnahme gefangen und geworfen wird.

public boolean MyDaoMethod() 
{ 


    boolean blnResult = false; 
    String strInsertQuery =" some sql query"; 
    try { 
     for (Vertex v : (Iterable<Vertex>) graph.command(
       new OCommandSQL(strInsertQuery)).execute()) { 

    } 
    catch(OCommandExecutorNotFoundException e2){ 
     logger.info("Printing whole exception !!! " + gson.toJson(e2.getStackTrace())); 
     logger.info("Printing the further details for exception !!!! " + Thread.currentThread().getStackTrace()[1].getClassName() + " " + Thread.currentThread().getStackTrace()[1].getMethodName() + " " + Thread.currentThread().getStackTrace()[1].getLineNumber()); 
     ExceptionBean objException = new ExceptionBean(); 
     objException.setStrExceptionCode("202"); 
     objException.setStrExceptionDesc("Cannot find a command executor for the command request : "+strInsertQuery); 
     objException.setStrFileName(Thread.currentThread().getStackTrace()[1].getFileName()); 
     objException.setStrClassName(Thread.currentThread().getStackTrace()[1].getClassName()); 
     objException.setStrMethodName(Thread.currentThread().getStackTrace()[1].getMethodName()); 

     for(int i=0;i<e2.getStackTrace().length;i++){ 
      if(objException.getStrClassName().equalsIgnoreCase(e2.getStackTrace()[i].getClassName()) 
        && objException.getStrMethodName().equalsIgnoreCase(e2.getStackTrace()[i].getMethodName())){ 
       objException.setStrLineNumber(""+e2.getStackTrace()[i].getLineNumber()); 
      } 
     } 

     String strExceptionObj = gson.toJson(objException); 
     throw new OrientDBCommandException(strExceptionObj); 
    }catch(OCommandSQLParsingException e1){ 
     logger.info("Printing whole exception !!! " + gson.toJson(e1.getStackTrace())); 
     logger.info("Printing the further details for exception !!!! " + Thread.currentThread().getStackTrace()[1].getClassName() + " " + Thread.currentThread().getStackTrace()[1].getMethodName() + " " + Thread.currentThread().getStackTrace()[1].getLineNumber()); 
     ExceptionBean objException = new ExceptionBean(); 
     objException.setStrExceptionCode("201"); 
     objException.setStrExceptionDesc("There is some kind of error in DataBase command parsing."); 
     objException.setStrFileName(Thread.currentThread().getStackTrace()[1].getFileName()); 
     objException.setStrClassName(Thread.currentThread().getStackTrace()[1].getClassName()); 
     objException.setStrMethodName(Thread.currentThread().getStackTrace()[1].getMethodName()); 

     for(int i=0;i<e1.getStackTrace().length;i++){ 
      if(objException.getStrClassName().equalsIgnoreCase(e1.getStackTrace()[i].getClassName()) 
        && objException.getStrMethodName().equalsIgnoreCase(e1.getStackTrace()[i].getMethodName())){ 
       objException.setStrLineNumber(""+e1.getStackTrace()[i].getLineNumber()); 
      } 
     } 

     String strExceptionObj = gson.toJson(objException); 
     throw new OrientDBCommandException(strExceptionObj); 

    } 
     catch (Exception e) { 
      logger.error(e); 
    }  

    return blnResult; 
} 

Ich habe eine benutzerdefinierte Ausnahmeklasse erstellt und in meiner DAO-Klasse verwendet.

Hier ist meine benutzerdefinierte Ausnahmeklasse

public class OrientDBCommandException extends OCommandSQLParsingException{ 

String ObjException; 

public OrientDBCommandException(String ObjException) { 
    super(ObjException); 

    this.ObjException=ObjException; 
} 

public ExceptionBean getExceptionObj(String strExceptionCode){ 

    ExceptionBean objException = new ExceptionBean(); 

    return objException; 


} 

}

Ich bin interessiert zu wissen, ob dieser Ansatz richtig ist oder nicht. Und wie kann ich die Methode getExceptionObj in der benutzerdefinierten Exception-Klasse in der Controller-Klasse erstellt, wenn ich kann.

Sagen Sie mir die Möglichkeit, benutzerdefinierte Ausnahmeklassenmethode in Java zu implementieren.

Antwort

0

Das ist nicht richtig .. nie eine excpetion fangen, wenn Sie keine Ahnung, wie sie damit umgehen, diesen Link hier ansehen, sollten Sie Exception handling in spring wayhttps://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

+0

Ich bin verwenden eher mit dem Antwortstatus nicht bequem ist und die Sicht für den Fehler. Mein Hauptziel ist es, die verursachte Ausnahme abzufangen und ein Objekt dafür zu erstellen, das alle Details bezüglich der Ausnahme definiert. –

+0

@DineshPurty Details sollten vom Ausnahmebehandler ausgelöst und abgefangen werden. In Ihrer Weise verlieren Sie nur Informationen über die eigentliche Ursache der Ausnahme – Jaiwo99

+0

Wie Sie sehen können ... Ich sammle alle Informationen in meinem catch-Block, der in der DAO-Klassenmethode vorhanden ist. Und von dort zu meiner benutzerdefinierten Ausnahmeklasse werfen, die dafür im Catch-Block der Controller-Klasse gesammelt wird. In der Controller-Klasse bekomme ich alle erforderlichen Informationen über die gefangene Ausnahme. –