From 171e36997e733176cc249ebfa368a62ae3f78b75 Mon Sep 17 00:00:00 2001
From: 沈斌 <bluelazysb@hotmail.com>
Date: Wed, 20 Dec 2017 11:43:10 +0800
Subject: [PATCH] updated

---
 src/main/java/com/moral/common/aop/ControllerAOP.java |   56 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/moral/common/aop/ControllerAOP.java b/src/main/java/com/moral/common/aop/ControllerAOP.java
index bd542c7..8c90a0b 100644
--- a/src/main/java/com/moral/common/aop/ControllerAOP.java
+++ b/src/main/java/com/moral/common/aop/ControllerAOP.java
@@ -1,14 +1,22 @@
 package com.moral.common.aop;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.stereotype.Component;
 
+import com.moral.common.bean.AppData;
+import com.moral.common.bean.ResultBean;
 import com.moral.common.exception.BusinessException;
+import com.moral.common.exception.ValidateException;
 
 import lombok.extern.log4j.Log4j;
 
@@ -16,13 +24,15 @@
 @Aspect
 @Component
 public class ControllerAOP {
-	
+
 	@Around("execution(* com.moral.controller.*Controller.*(..))")
-	public Object handlerControllerMethod(ProceedingJoinPoint pjp) {
+	public Object handlerControllerMethod(ProceedingJoinPoint pjp) throws Exception {
+
 		long startTime = System.currentTimeMillis();
-        Map<String, Object> result;
+		Object result;
+
 		try {
-			result = (Map<String, Object>) pjp.proceed();
+			result = pjp.proceed();
 			log.info(pjp.getSignature() + "use time:" + (System.currentTimeMillis() - startTime));
 		} catch (Throwable e) {
 			result = handlerException(pjp, e);
@@ -31,18 +41,40 @@
 		return result;
 	}
 
-	private Map<String, Object> handlerException(ProceedingJoinPoint pjp, Throwable e) {
-		Map<String, Object> result = new HashMap<String, Object>();
-
-		// ������������
+	@SuppressWarnings("rawtypes")
+	private Object handlerException(ProceedingJoinPoint pjp, Throwable e) throws Exception {
+		Signature sig = pjp.getSignature();
+		MethodSignature msig = null;
+		if (!(sig instanceof MethodSignature)) {
+			throw new IllegalArgumentException("���������������������������");
+		}
+		msig = (MethodSignature) sig;
+		Object target = pjp.getTarget();
+		Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());
+		Type type = currentMethod.getGenericReturnType();
+		String message = "";
 		if (e instanceof BusinessException) {
-			result.put("msg", e.getLocalizedMessage());
+			message = e.getLocalizedMessage();
+		} else if (e instanceof ValidateException) {
+			message = e.getLocalizedMessage();
 		} else {
 			log.error(pjp.getSignature() + " error ", e);
-			result.put("msg", e.toString());
-			//TODO ������������������������������������������������������������������
+			message = e.toString();
 		}
 
-		return result;
+		if (type instanceof ParameterizedType) {
+			Type rawType = ((ParameterizedType) type).getRawType();
+			if (rawType == AppData.class) {
+				return new AppData(message,AppData.FAIL);
+			} else if (rawType == ResultBean.class) {
+				return new ResultBean(message,ResultBean.FAIL);
+			} else if (rawType == Map.class) {
+				Map<String, Object> resultMap = new HashMap<String, Object>();
+				resultMap.put("msg", message);
+				return resultMap;
+			}
+		}
+		return null;
+
 	}
 }

--
Gitblit v1.8.0