
S-mall-ssm 统一异常处理机制ExceptionHandler 如何优雅地处理所有错误【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssmS-mall-ssm是一个仿天猫页面的 JavaWEB 商城项目基于 SSMSpring Spring MVC MyBatis搭建功能覆盖商品、购物车、订单、评论与后台管理等完整电商链路。本文将深入讲解 S-mall-ssm 统一异常处理机制借助 Spring MVC 的 ExceptionHandler 注解这个商城系统只用了一个方法就优雅地兜住了所有未捕获异常还配合自定义异常类实现了精准的业务报错。对正在学习 SSM 项目异常处理、想给商城项目加上全局错误页的开发者来说这份机制拆解非常值得收藏。为什么商城项目需要统一异常处理在真实的电商场景里用户的操作路径很长加购、下单、支付、评论任何一步都可能出错。如果每个 Controller 都各自 try-catch代码会变得又臭又长如果放任异常不管用户就会看到又丑又吓人的白屏或堆栈信息。S-mall-ssm 的做法很聪明把异常处理集中到一个基类里所有 Controller 继承它错误统一收口页面统一呈现。这正是统一异常处理机制的核心价值——一处定义全局生效。认识 S-mall-ssm 的自定义异常类先看 S-mall-ssm 在 exception 目录 下定义的两个业务异常AuthException.java权限类异常例如非法访问没有权限ParameterException.java参数类异常例如手机号填写错误它们都是简单的Exception子类通过构造函数接收提示消息。别小看这两个小类它们是精准报错的关键业务代码里想表达什么错误就抛什么异常语义一目了然。核心揭秘BaseController 里的 ExceptionHandlerS-mall-ssm 统一异常处理的精华集中在 BaseController.java 中代码如下ExceptionHandler public String handleException(HttpServletRequest request, Exception exception) { exception.printStackTrace(); return 500; }这个方法的威力在于两点ExceptionHandler 注解告诉 Spring MVC此方法专门处理控制器抛出的异常方法参数是Exception意味着它兜住所有类型的异常。继承式全局生效AdminBaseController和FrontBaseController都继承自BaseController而所有后台、前台控制器又分别继承这两个基类。于是整个项目的 Controller 全部被这张异常安全网覆盖无需在任何一个业务方法里重复写 try-catch。发生异常后方法会打印堆栈便于排查并统一返回名为500的视图也就是错误页面 500.jsp。这个页面会展示exception.toString()的友好提示用户看到的是整齐的警告框而不是崩溃的白屏。业务层如何抛出异常看订单模块实战光有兜底还不够还得让业务代码主动、精准地抛出异常。在 OrderFrontController.java 里能看到两个典型用法参数校验创建订单时用正则校验手机号格式不对就throw new ParameterException(手机号填写错误)权限校验修改购物车、删除订单前检查归属不是本人操作就throw new AuthException(非法访问没有权限)抛出后异常顺着调用链冒泡到控制器层最终被BaseController的 ExceptionHandler 方法统一捕获跳转到 500 页面。整个链路业务层抛异常 → Controller 冒泡 → 基类统一捕获 → 错误页友好呈现异常处理机制就这样优雅地闭环了。配套的鉴权与参数校验机制S-mall-ssm 的异常处理不是孤立存在的它与项目里的注解鉴权、注解参数校验深度配合AuthInterceptor.java拦截请求校验用户登录与权限未通过即抛出异常VerificationAspect.javaAOP 切面处理Auth、Nullable等注解的参数校验异常同样交给全局处理业务请求则通过 msg.jsp 返回OutOfStocksuccess等业务状态消息属于可预期流程的控制流这样一来不可预期的系统异常走 ExceptionHandler可预期的业务结果走消息页两类错误各得其所职责非常清晰。从 S-mall-ssm 学到的统一异常处理最佳实践看完整个机制可以提炼出适合自己项目复用的 4 个要点基类集中处理把 ExceptionHandler 放在 Controller 基类里通过继承实现全局覆盖比在每个类里粘贴代码优雅得多。自定义异常分类按权限、参数等维度定义语义化异常类让抛什么错变得可读、可维护。兜底 细化结合一个Exception级别的兜底方法保证永不白屏同时用自定义异常保留精确信息。业务消息与系统错误分离可预期的结果如库存不足走业务消息页真正的异常才进统一错误页避免误用异常控制正常流程。小结S-mall-ssm 用约 20 行代码就把整个商城的异常处理安排得明明白白两个自定义异常类表达业务语义一个 ExceptionHandler 方法兜住全局一张 500 页面保护用户体验。这套 SSM 项目统一异常处理方案既适合新手理解 Spring MVC 异常处理的精髓也适合开发者直接借鉴到自己的电商项目里。下次你的项目再出现莫名的 500不妨先建一个 BaseController把异常优雅地接住。【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考