话不多说,直接上代码。。。
异常处理类GlobalExceptionHandler
public class GlobalExceptionHandler {@ExceptionHandler(UnknownServiceException.class)public static void UnknownServiceExceptionHandle(Exception ex, HttpServletRequest request, HttpServletResponse response, String serverName) {// 在这里处理异常逻辑JsonErrorInfo.ResponseWarning(response, serverName, ex.getMessage());}
}
自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionHandler {Class<? extends Throwable>[] value() default {};
}
调用处
try{// 利用反射执行接口方法// xxxxxxxxxxxxxxxxxxxxxxxxxxxx} catch (Exception ex) {ex = (Exception) ex.getCause();Class<?> globalExceptionHandlerClass = GlobalExceptionHandler.class;Method[] handleMethods = globalExceptionHandlerClass.getDeclaredMethods();for (Method m : handleMethods) {if (m.isAnnotationPresent(ExceptionHandler.class)) {ExceptionHandler annotation = m.getAnnotation(ExceptionHandler.class);Class<? extends Throwable>[] exceptions = annotation.value();for (Class<? extends Throwable> exception : exceptions) {if (ex.getClass().isAssignableFrom(exception)) {// 执行全局异常处理方法try {//Object globalExceptionHandlerInstance = globalExceptionHandlerClass.newInstance();m.invoke(null, ex, request,response,WebContext.globalResourceObject.get());return;} catch (Exception e) {e.printStackTrace(); // 可以打印错误日志或者返回错误信息return;}}}}}// 没有找到对应的异常处理方法,打印异常堆栈ex.printStackTrace();}