spring异常+自定义以及使用
1、首先自定义异常
DataException:

package com.wbg.maven1128.exception; public class DataException extends Exception { public DataException(){ } public DataException(String msg){ super(msg); } }
DbException:

package com.wbg.maven1128.exception; public class DbException extends Exception { public DbException(){ } public DbException(String msg){ super(msg); } }
2、在dao层把异常抛了
在服务层做好
不使用注解方法
在控制层使用

@Controller @RequestMapping("/order") public class OrdersController { @Autowired private OrdersService ordersService; @PostMapping(produces = "application/json;charset=utf-8") @ResponseBody public String add(Orders orders ){ System.out.println(orders); try { ordersService.insert(orders); }catch(DbException e){ return e.getMessage(); } catch (DataException e) { return e.getMessage(); } return "成功"; } @GetMapping public String index(){ return "order_add"; }
1、自定义AbstractHandlerExceptionResolver
自定义就是当遇到AbstractHandlerExceptionResolver异常的时候直接进入自定义的异常,不再进入AbstractHandlerExceptionResolver
第一步:创建一个类来进行继承AbstractHandlerExceptionResolver类
MyExceptionResolver :

package com.wbg.maven1128.exception; import org.springframework.beans.TypeMismatchException; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyExceptionResolver extends AbstractHandlerExceptionResolver { @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { if(ex instanceof DbException){ return new ModelAndView("数据库错误"); }else if(ex instanceof TypeMismatchException){ return new ModelAndView("TypeMismatchException"); } return null; } }
第二步:进行在xml注册
<bean class="com.wbg.maven1128.exception.MyExceptionResolver"/>
最后直接在方法体上抛出异常即可throws Exception
2、使用ExceptionHandler注解方式

@Controller @RequestMapping("/order") public class OrdersController { @Autowired private OrdersService ordersService; @PostMapping(produces = "application/json;charset=utf-8") @ResponseBody public String add(Orders orders ) throws Exception { ordersService.insert(orders); return "成功"; } @GetMapping public String index(){ return "order_add"; } @ExceptionHandler(DbException.class) public String handlerDbException(Exception ex, Model model){ model.addAttribute("err",ex.getMessage()); return "err1"; } @ExceptionHandler(DataException.class) public ModelAndView handlerDbException2(Exception ex, Model model){ model.addAttribute("err",ex.getMessage()); return new ModelAndView("err2"); }
3、使用@ControllerAdvice注解(推荐)
1、首先创建一个类,在这个类上加注解
2、在该类中写方法,方法上使用@ExceptionHandler注解进行捕获异常
3、然后在Controller层直接抛出异常、会自动捕获

package com.wbg.maven1128.controller; import com.wbg.maven1128.exception.DbException; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; 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; @Component @ControllerAdvice public class AllControllerAdvice { // 这个处理,对所有的 Controller 都会有效 @ExceptionHandler(Exception.class) @ResponseStatus(value = HttpStatus.URI_TOO_LONG) @ResponseBody public String handlerDbException3 () { return "ksjfksd"; } @ExceptionHandler(DbException.class) @ResponseStatus(value = HttpStatus.URI_TOO_LONG) @ResponseBody public String DbException3 () { return "ksjfksd"; } @ExceptionHandler(RuntimeException.class) public String handlerDbException4 () { return "runtime"; } }
测试:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下