2017-07-21 2 views
0

Ich habe die folgende Methode in meiner Ruhe ControllerInstanz in UncaughtExceptionHandler

public DeferredResult<String> getWashHistory(@RequestParam(value = "sid", required = true, defaultValue = "") String sid, 
      HttpServletResponse response, HttpServletRequest request, 
      @RequestParam(value = "sort", defaultValue = "") String sortType, 
      @RequestParam(value = "order", defaultValue = "") String order, 
      @RequestParam(value = "limit", defaultValue = "") String limit, 
      @RequestParam(value = "offset", defaultValue = "") String offset) { 

     System.out.println("Thread: " + Thread.currentThread()); 
     final Integer managerId = checkSession(sid); 
     DeferredResult<String> defResult = new DeferredResult<>(); 
     new Thread(() -> { 
      System.out.println("tert: " + Thread.currentThread()); 
      Thread.currentThread().setUncaughtExceptionHandler(new SeparateThreadsExceptionHandler(defResult)); 
      final String result = washController.getWashHistory(managerId, order, sortType, limit, offset); 
      defResult.setResult(result); 
     }).start(); 
     return defResult; 
    } 

Innen getWashHistory, werfe ich meine benutzerdefinierte Ausnahme InvalidUserInputException genannt, zu handhaben diese Ausnahme ich die folgende Klasse haben

public class SeparateThreadsExceptionHandler implements Thread.UncaughtExceptionHandler{ 
    private DeferredResult<String> dr; 
    public SeparateThreadsExceptionHandler(DeferredResult<String> dr){ 
     this.dr = dr; 
    } 
    @Override 
    public void uncaughtException(Thread t, Throwable e) { 
     if(e instanceof InvalidUserInputException){ 
      InvalidUserInputException throwableException = (InvalidUserInputException)e; 
      dr.setResult(throwableException.error().getErrorCode()); 
     } else { 
      throw new UnknownException("Unknown exception", "unKnown", "unKnown", null); 
     } 

Die Frage ist, in Projekt habe ich viele benutzerdefinierte Ausnahmen, ist es möglich zu vermeiden, Instanz von in public void uncaughtException(Thread t, Throwable e) zu verwenden, um zwischen allen Ausnahmen zu wechseln?

Antwort

0

Sie können die Vererbung für diese verwenden, wie unten

gezeigt
class ParentException extends Exception { 
     // based on .error() call showin in example, I am assuming you have some 
     // class that holds error code. 
     private Error error; 
} 

dann Ausnahme Kind

class InvalidUserInputException extends ParentException { 
// create constructor here that builds Error. 
} 

und schließlich sein wird,

if(e instanceof ParentException) { 
    ParentException throwableException = (ParentException)e; 
      dr.setResult(throwableException.error().getErrorCode()); 
} 
+0

Danke, es ist genau das, was ich bin Auf der Suche nach –

Verwandte Themen