用户抛异常函数

master
Eterlaze 2 months ago
parent f9ac9c2dc9
commit 78376dec90

@ -0,0 +1,5 @@
package com.example.api.exception;
public class AccountAndPasswordError extends Exception{
}

@ -0,0 +1,48 @@
package com.example.api.handler;
// 导入自定义的账户和密码错误异常类
import com.example.api.exception.AccountAndPasswordError;
// 导入用于封装API响应结果的类
import com.example.api.model.support.ResponseResult;
// 导入登录日志服务接口
import com.example.api.service.LoginLogService;
// 导入SLF4J的Logger工厂用于日志记录
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 导入Spring的Autowired注解用于依赖注入
import org.springframework.beans.factory.annotation.Autowired;
// 导入Spring Security的访问拒绝异常类
import org.springframework.security.access.AccessDeniedException;
// 导入Spring MVC的注解用于定义异常处理方法和全局异常处理
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* controller
* controller
* ResponseApiResult
*/
@ResponseBody
@RestControllerAdvice
public class GlobalExceptionHandler {
// 使用@Autowired注解注入LoginLogService
@Autowired
private LoginLogService loginLogService;
// 创建一个Logger实例用于记录日志
private final Logger logger = LoggerFactory.getLogger(getClass());
// 使用@ExceptionHandler注解定义一个方法来处理所有类型的异常
@ExceptionHandler(value = Exception.class)
public Object handleException(Exception e) {
// 如果异常是AccessDeniedException类型返回403状态码和相应消息
if (e instanceof AccessDeniedException) {
return new ResponseResult<>(403, "你没有访问权限");
}
// 记录异常信息
logger.warn(e.getMessage());
// 对于其他类型的异常返回400状态码和异常信息
return new ResponseResult<>(400, e.getMessage());
}
}

@ -0,0 +1,42 @@
package com.example.api.handler;
// 导入自定义的禁止基础响应注解
import com.example.api.annotation.DisableBaseResponse;
// 导入用于封装API响应结果的类
import com.example.api.model.support.ResponseResult;
// 导入Spring的MethodParameter类用于获取方法参数信息
import org.springframework.core.MethodParameter;
// 导入Spring的MediaType类用于表示媒体类型
import org.springframework.http.MediaType;
// 导入Spring的ServerHttpRequest和ServerHttpResponse类用于处理HTTP请求和响应
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
// 导入Spring MVC的@ControllerAdvice注解用于定义全局的控制器增强
import org.springframework.web.bind.annotation.ControllerAdvice;
// 导入Spring MVC的ResponseBodyAdvice接口用于在响应写入前进行处理
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* Controller
* ResponseResult<T>
*/
@ControllerAdvice(value = "com.example.api.controller")
public class GlobalResponseHandler implements ResponseBodyAdvice<Object> {
// 实现supports方法判断当前方法是否需要被增强
@Override
public boolean supports(MethodParameter methodParameter, Class c) {
// 如果方法参数上有DisableBaseResponse注解则不进行增强
return !methodParameter.hasParameterAnnotation(DisableBaseResponse.class);
}
// 实现beforeBodyWrite方法在响应写入前进行处理
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass,
ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
// 如果返回值为null则返回一个空的ResponseResult对象
// 否则将返回值封装在ResponseResult对象中
return o == null ? new ResponseResult<>() : new ResponseResult<>(o);
}
}
Loading…
Cancel
Save