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?
Danke, es ist genau das, was ich bin Auf der Suche nach –