步骤
- 新建一个自定义异常类UserException,再定义它的子类NameException和AgeException.
public class AgeException extends UserException{
public AgeException() {
}
public AgeException(String message) {
super(message);
}
}
public class NameException extends UserException{
public NameException() {
}
public NameException(String message) {
super(message);
}
}
public class UserException extends Exception{
public UserException() {
}
public UserException(String message) {
super(message);
}
}
- 再controller中抛出NameException,AgeException。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/some")
public ModelAndView doSome(String name,Integer age) throws UserException {
ModelAndView modelAndView = new ModelAndView();
if(!name.equals("黄振聪")){
throw new NameException("用户:"+name+"不是黄振聪!");
}
if(age == null || age > 100){
throw new AgeException("年龄不符合要求!");
}
modelAndView.addObject("uname",name);
modelAndView.addObject("uage",age);
modelAndView.setViewName("target");
return modelAndView;
}
}
- 创建一个普通类,作为全局异常处理类。并在类的上面加上@ControllerAdvice,在类中定义方法,方法上面加入@ExceptionHandler.
@ControllerAdvice
public class UserExceptionHandler {
@ExceptionHandler(value = NameException.class)
public ModelAndView nameException(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("tips","处理NameException");
modelAndView.addObject("ex",ex);
modelAndView.setViewName("nameError");
return modelAndView;
}
@ExceptionHandler(value = AgeException.class)
public ModelAndView ageException(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("tips","处理AgeException");
modelAndView.addObject("ex",ex);
modelAndView.setViewName("ageError");
return modelAndView;
}
@ExceptionHandler
public ModelAndView otherException(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("ex",ex);
modelAndView.setViewName("otherError");
return modelAndView;
}
}
- 创建处理异常的视图界面。
- 在SpringMVC配置文件中添加:组件扫描器,扫描@Controller注解和@ControllerAdvice所在的包名;声明注解驱动。
<context:component-scan base-package="com.hzc.controller" />
<context:component-scan base-package="com.hzc.handler" />
<mvc:annotation-driven />
结构图:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理