定义全局异常处理
package com.jay.advice; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.security.access.AccessDeniedException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.UnsatisfiedServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import com.jay.dto.ResponseInfo; /** * springmvc异常处理 * * @author jay * */ @RestControllerAdvice//针对restController包装(入口必须是controller),因此Service、dao必须异常向上抛,直至到Controller public class ExceptionHandlerAdvice { private static final Logger log = LoggerFactory.getLogger("adminLogger"); @ExceptionHandler({ IllegalArgumentException.class }) @ResponseStatus(HttpStatus.BAD_REQUEST)//400:错误的请求 public ResponseInfo badRequestException(IllegalArgumentException exception) { return new ResponseInfo(HttpStatus.BAD_REQUEST.value() + "", exception.getMessage()); } @ExceptionHandler({ AccessDeniedException.class }) @ResponseStatus(HttpStatus.FORBIDDEN)//403:禁止访问(未授权) public ResponseInfo badRequestException(AccessDeniedException exception) { return new ResponseInfo(HttpStatus.FORBIDDEN.value() + "", exception.getMessage()); } @ExceptionHandler({ MissingServletRequestParameterException.class, HttpMessageNotReadableException.class, UnsatisfiedServletRequestParameterException.class, MethodArgumentTypeMismatchException.class }) @ResponseStatus(HttpStatus.BAD_REQUEST)//400:错误的请求 public ResponseInfo badRequestException(Exception exception) { return new ResponseInfo(HttpStatus.BAD_REQUEST.value() + "", exception.getMessage()); } @ExceptionHandler(Throwable.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)//500(服务器内部异常) public ResponseInfo exception(Throwable throwable) { log.error("系统异常", throwable); return new ResponseInfo(HttpStatus.INTERNAL_SERVER_ERROR.value() + "", throwable.getMessage()); } }
package com.jay.dto; import java.io.Serializable; public class ResponseInfo implements Serializable { private static final long serialVersionUID = 1L; private String code;//http状态码 private String message;//返回信息 public ResponseInfo(String code, String message) { super(); this.code = code; this.message = message; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App