springboot 全局异常处理
package com..web.advice; import com.web.JsonResult; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.Iterator; import java.util.Set; @ControllerAdvice(basePackages = {"com.web"}) @Slf4j public class WebControllerAdvice { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody JsonResult handlerMethodArgumentNotValidException(HttpServletRequest request, MethodArgumentNotValidException exception) { log.error("Controller MethodArgumentNotValidException-Path:[{}],refer:{}", request.getRequestURI(), request.getHeader("referer"), exception); return getBindingResultErrorMessage(exception.getBindingResult()); } @ExceptionHandler(BindException.class) @ResponseBody public JsonResult handleMethodBindException(HttpServletRequest request, BindException e) { log.error("Controller BindException-Path:{},refer:{}", request.getRequestURI(), request.getHeader("referer")); return getBindingResultErrorMessage(e.getBindingResult()); } private JsonResult getBindingResultErrorMessage(BindingResult bindingResult2) { final BindingResult bindingResult = bindingResult2; return JsonResult.fail("500", bindingResult.getAllErrors().get(0).getDefaultMessage()); } @ExceptionHandler(ConstraintViolationException.class) @ResponseBody JsonResult handlerConstraintViolationException(HttpServletRequest request, ConstraintViolationException exception) { log.error("Controller ConstraintViolationException-Path:[{}]", request.getRequestURI(), exception); Set<ConstraintViolation<?>> constraintViolations = exception.getConstraintViolations(); final Iterator<ConstraintViolation<?>> constraintViolationIterator = constraintViolations.iterator(); if (constraintViolationIterator.hasNext()) { ConstraintViolation<?> constraintViolation = constraintViolationIterator.next(); return JsonResult.fail("500", constraintViolation.getMessage()); } return JsonResult.fail("500", "参数异常"); } @ExceptionHandler(ServiceException.class) @ResponseStatus(HttpStatus.OK) @ResponseBody JsonResult handleControllerServiceException(HttpServletRequest request, Throwable th) { ServiceException exception = (ServiceException) th; log.error("Controller ServiceException-Path:[{}]", request.getRequestURI(), th); return JsonResult.fail(exception.getCode(), exception.getMessage()); } @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody JsonResult handleControllerException(HttpServletRequest request, Throwable th) { HttpStatus status = getStatus(request); log.error("Controller Path: [{}]", request.getRequestURI(), th); return JsonResult.fail(status.toString(), "系统错误"); } private HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); if (statusCode == null) { return HttpStatus.INTERNAL_SERVER_ERROR; } return HttpStatus.valueOf(statusCode); } }
标签:
springboot全局异常处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通