话不多说,直接上代码。。。
异常处理类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();
}