|
|
@@ -1,10 +1,18 @@
|
|
|
package com.lc.ibps.cloud.utils;
|
|
|
|
|
|
+import org.apache.ibatis.exceptions.PersistenceException;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import com.lc.ibps.base.core.util.ExceptionUtil;
|
|
|
import com.lc.ibps.cloud.entity.APIResult;
|
|
|
+import org.springframework.dao.DataAccessException;
|
|
|
+
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
public class ResultUtil {
|
|
|
|
|
|
@@ -24,12 +32,36 @@ public class ResultUtil {
|
|
|
result.setState(state);
|
|
|
result.setMessage(message);
|
|
|
LOGGER.error("ERROR ==> state {}, message {}.", state, message);
|
|
|
- if(null != e) {
|
|
|
+ if (isDatabaseRelatedException(e)){
|
|
|
+ LOGGER.error(e.getMessage(), e);
|
|
|
+ return result;
|
|
|
+ }else {
|
|
|
result.setCause(ExceptionUtil.analysisCause(e));
|
|
|
LOGGER.error(e.getMessage(), e);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ private static final Set<Class<?>> DATABASE_EXCEPTION_TYPES = Collections.unmodifiableSet(
|
|
|
+ new HashSet<>(Arrays.asList(
|
|
|
+ SQLException.class, // JDBC 原生异常
|
|
|
+ DataAccessException.class, // Spring 抽象异常
|
|
|
+ PersistenceException.class // JPA 异常
|
|
|
+ ))
|
|
|
+ );
|
|
|
+
|
|
|
+ public static boolean isDatabaseRelatedException(Throwable ex) {
|
|
|
+ while (ex != null) {
|
|
|
+ // 检查当前异常是否属于数据库异常类型
|
|
|
+ for (Class<?> type : DATABASE_EXCEPTION_TYPES) {
|
|
|
+ if (type.isInstance(ex)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ex = ex.getCause();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 设置异常结果
|