Merge branch 'dev' into ohos

This commit is contained in:
acgist
2024-11-14 10:22:56 +08:00

View File

@@ -102,11 +102,14 @@ public final class ErrorUtils {
final MessageCode messageCode = messageCodeException.getMessageCode(); final MessageCode messageCode = messageCodeException.getMessageCode();
status = messageCode.getStatus(); status = messageCode.getStatus();
message = Message.fail(messageCode, messageCodeException.getMessage()); message = Message.fail(messageCode, messageCodeException.getMessage());
} else if(rootError instanceof Throwable throwable) { } else if(
rootError instanceof Throwable rootThrowable &&
globalError instanceof Throwable globalThrowable
) {
// 未知异常:异常转换 // 未知异常:异常转换
final MessageCode messageCode = ErrorUtils.messageCode(status, throwable); final MessageCode messageCode = ErrorUtils.messageCode(status, globalThrowable, rootThrowable);
status = messageCode.getStatus(); status = messageCode.getStatus();
message = Message.fail(messageCode, ErrorUtils.message(messageCode, throwable)); message = Message.fail(messageCode, ErrorUtils.message(messageCode, rootThrowable));
} else { } else {
// 没有异常 // 没有异常
final MessageCode messageCode = MessageCode.of(status); final MessageCode messageCode = MessageCode.of(status);
@@ -193,20 +196,35 @@ public final class ErrorUtils {
} }
/** /**
* @param status 原始状态编码 * @see #messageCode(int, Throwable, Throwable)
* @param throwable 异常 */
public static final MessageCode messageCode(int status, Throwable throwable) {
return ErrorUtils.messageCode(status, throwable, throwable);
}
/**
* @param status 原始状态
* @param globalThrowable 外层异常
* @param rootThrowable 原始异常
* *
* @return 状态编码 * @return 响应状态
* *
* @see ResponseEntityExceptionHandler * @see ResponseEntityExceptionHandler
* @see DefaultHandlerExceptionResolver * @see DefaultHandlerExceptionResolver
*/ */
public static final MessageCode messageCode(int status, Throwable throwable) { public static final MessageCode messageCode(int status, Throwable globalThrowable, Throwable rootThrowable) {
final Class<?> clazz = throwable.getClass(); if(rootThrowable == null || globalThrowable == null) {
return MessageCode.CODE_9999;
}
final Class<?> rootClazz = rootThrowable.getClass();
final Class<?> globalClazz = globalThrowable.getClass();
return CODE_MAPPING.entrySet().stream() return CODE_MAPPING.entrySet().stream()
.filter(entry -> { .filter(entry -> {
final Class<?> mappingClazz = entry.getKey(); final Class<?> mappingClazz = entry.getKey();
return mappingClazz.equals(clazz) || mappingClazz.isAssignableFrom(clazz); return mappingClazz.equals(globalClazz) ||
mappingClazz.isAssignableFrom(globalClazz) ||
mappingClazz.equals(rootClazz) ||
mappingClazz.isAssignableFrom(rootClazz);
}) })
.map(Map.Entry::getValue) .map(Map.Entry::getValue)
.findFirst() .findFirst()
@@ -271,7 +289,7 @@ public final class ErrorUtils {
if(cause instanceof MessageCodeException) { if(cause instanceof MessageCodeException) {
return cause; return cause;
} }
} while(cause != null && (cause = cause.getCause()) != null); } while(cause != null && cause.getCause() != null && (cause = cause.getCause()) != null);
// 返回原始异常 // 返回原始异常
return t; return t;
} }