You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.5 KiB
90 lines
2.5 KiB
package com.student.utils;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
/**
|
|
* 异常处理工具类,用于统一处理系统中的异常情况
|
|
* 提供异常信息格式化和日志记录功能
|
|
*/
|
|
public class ExceptionHandler {
|
|
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
/**
|
|
* 处理异常并返回格式化的异常信息
|
|
* @param e 异常对象
|
|
* @return 格式化的异常信息
|
|
*/
|
|
public static String handleException(Exception e) {
|
|
StringBuilder message = new StringBuilder();
|
|
message.append("[错误] ")
|
|
.append(getCurrentTime())
|
|
.append(" - ")
|
|
.append(e.getClass().getSimpleName())
|
|
.append(": ")
|
|
.append(e.getMessage())
|
|
.append("\n");
|
|
|
|
// 添加异常堆栈信息
|
|
message.append("异常堆栈:\n")
|
|
.append(getStackTraceAsString(e));
|
|
|
|
// 记录到控制台
|
|
System.err.println(message.toString());
|
|
|
|
// 这里可以扩展为写入日志文件
|
|
// logToFile(message.toString());
|
|
|
|
return e.getMessage(); // 返回简洁的错误信息给用户
|
|
}
|
|
|
|
/**
|
|
* 获取当前时间的格式化字符串
|
|
* @return 当前时间字符串
|
|
*/
|
|
private static String getCurrentTime() {
|
|
return LocalDateTime.now().format(formatter);
|
|
}
|
|
|
|
/**
|
|
* 将异常堆栈转换为字符串
|
|
* @param e 异常对象
|
|
* @return 异常堆栈字符串
|
|
*/
|
|
private static String getStackTraceAsString(Exception e) {
|
|
StringWriter sw = new StringWriter();
|
|
PrintWriter pw = new PrintWriter(sw);
|
|
e.printStackTrace(pw);
|
|
pw.close();
|
|
return sw.toString();
|
|
}
|
|
|
|
/**
|
|
* 验证学生ID格式
|
|
* @param id 学生ID
|
|
* @return 是否有效
|
|
*/
|
|
public static boolean isValidStudentId(String id) {
|
|
return id != null && !id.trim().isEmpty();
|
|
}
|
|
|
|
/**
|
|
* 验证学生姓名格式
|
|
* @param name 学生姓名
|
|
* @return 是否有效
|
|
*/
|
|
public static boolean isValidStudentName(String name) {
|
|
return name != null && !name.trim().isEmpty() && name.length() <= 20;
|
|
}
|
|
|
|
/**
|
|
* 验证学生年龄
|
|
* @param age 学生年龄
|
|
* @return 是否有效
|
|
*/
|
|
public static boolean isValidStudentAge(int age) {
|
|
return age >= 1 && age <= 150;
|
|
}
|
|
} |