| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package com.ydtech.aop;
- import cn.dev33.satoken.exception.NotLoginException;
- import cn.dev33.satoken.exception.NotPermissionException;
- import com.ydtech.aop.exception.DescribeException;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.core.page.HttpStatus;
- import com.ydtech.exception.SystemException;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.dao.DuplicateKeyException;
- import org.springframework.validation.BindingResult;
- import org.springframework.validation.ObjectError;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
- import javax.validation.ConstraintViolationException;
- import java.sql.SQLIntegrityConstraintViolationException;
- import java.util.List;
- @ControllerAdvice
- public class GlobalExceptionHandler {
- private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
- /**
- * 判断错误是否是已定义的已知错误,不是则由未知错误代替,同时记录在log中
- *
- * @param e 异常
- * @return
- */
- @ExceptionHandler(value = Exception.class)
- @ResponseBody
- public HttpResult exceptionGet(Exception e) {
- LOGGER.error("【系统异常】{}", e);
- // if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
- // StackTraceElement element = e.getStackTrace()[0];
- // ErrorInfo errorInfo = new ErrorInfo(
- // element.getClassName(),
- // element.getFileName(),
- // element.getMethodName(),
- // String.valueOf(element.getLineNumber())
- // );
- //
- // return HttpResult.error(-9999, errorInfo.toString());
- // }
- return HttpResult.error(-9999, "程序异常,请联系管理员");
- }
- @ExceptionHandler(value = DescribeException.class)
- @ResponseBody
- public HttpResult describeExceptionHandle(DescribeException describeException) {
- return HttpResult.error(describeException.getCode(), describeException.getMessage());
- }
- @ExceptionHandler(value = SystemException.class)
- @ResponseBody
- public HttpResult systemExceptionHandle(SystemException systemException) {
- return HttpResult.error(Integer.parseInt(systemException.getCode()), systemException.getMessage());
- }
- @ExceptionHandler(value = MethodArgumentNotValidException.class)
- @ResponseBody
- public HttpResult methodArgumentNotValidExceptionHandle(MethodArgumentNotValidException methodArgumentNotValidException) {
- BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();
- List<ObjectError> objectErrors = bindingResult.getAllErrors();
- String message = objectErrors.get(0).getDefaultMessage();
- return HttpResult.error(400, message);
- }
- @ExceptionHandler(value = DuplicateKeyException.class)
- @ResponseBody
- public HttpResult sqlExceptionHandle(SQLIntegrityConstraintViolationException sqlException) {
- return HttpResult.error("违反唯一约束:" + sqlException.getMessage()
- .substring(0, sqlException.getMessage().indexOf("for key")));
- }
- @ExceptionHandler(value = ConstraintViolationException.class)
- @ResponseBody
- public HttpResult constraintViolation(ConstraintViolationException constraintViolationException) {
- return HttpResult.error(constraintViolationException.getMessage());
- }
- @ExceptionHandler(value = NotLoginException.class)
- @ResponseBody
- public HttpResult notLoginException(NotLoginException e) {
- return HttpResult.error(HttpStatus.SC_UNAUTHORIZED, "未登录状态,无法访问。");
- }
- @ExceptionHandler(value = NotPermissionException.class)
- @ResponseBody
- public HttpResult notPermissionException(NotPermissionException e) {
- return HttpResult.error(HttpStatus.SC_FORBIDDEN, "未获得权限,无法访问。");
- }
- }
|