SpringMVC之异常处理

SpringMVC之异常处理

异常分为编译时异常和运行时异常,编译时异常我们trycatch捕获,捕获后自行处理,而运行时异常是不可预期的,就需要规范编码来避免,在SpringMVC中,不管是编译异常还是运行时异常,都可以最终由SpringMVC提供的异常处理器进行统一管理,这样就可以避免随时随地捕获异常的繁琐性。

三种处理方式

1.简单异常处理器:使用Spring MVC内置的异常处理器处理:SimpleMappingExceptionResolver

java 复制代码
@Component
public class MysimpleMappingExceton  {
    @Bean
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver(){
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
        //默认错误
        simpleMappingExceptionResolver.setDefaultErrorView("default.html");
        Properties properties = new Properties();
        properties.setProperty("java.lang.ArithmeticExceotion","erro1.html");
        properties.setProperty("java.io.FileNotFoundException","erro2.html");
        simpleMappingExceptionResolver.setExceptionMappings(properties);
        return simpleMappingExceptionResolver;
    }
}

2.自定义异常处理器:实现HandlerExceptionResolver接口,自定义异常进行处理

java 复制代码
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/default.html");
        return modelAndView;
    }
}

3.使用@ControllerAdvice@ExceptionHandler实现全局异常

java 复制代码
@ControllerAdvice
public class GloExceotion {
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Result runtimeException(){
        Result result = new Result(200,"错误",new Object());
        return result;
    }
    @ExceptionHandler(FileNotFoundException.class)
    public ModelAndView fileNotException(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/erro2.html");
        return modelAndView;
    }
    @ExceptionHandler(Exception.class)
    public ModelAndView Exception(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/default.html");
        return modelAndView;
    }
}

例子

java 复制代码
@RestController
public class ExceptionController {
    @RequestMapping("/e1")
    public String e1 (){
        int a=10/0;
        return "ruuning exception";
    }
    @RequestMapping("/e2")
    public String e2() throws FileNotFoundException {
        FileInputStream fileInputStream = new FileInputStream("file:/barch:/");
        return "ruuning exception";
    }
    @RequestMapping("/e3")
    public String e3()  {
        int [] array ={1,2};
        System.out.println(array[5]);
        return "ruuning exception";
    }
}
相关推荐
SL_staff3 分钟前
JVS-APS 实践:用双向反馈闭环打破制造计划孤岛
java·spring cloud·全栈
wangruofeng16 分钟前
2026 Web 技术选型指南,AI 时代如何选择适合项目的技术栈
前端·aigc·ai编程
\光辉岁月/21 分钟前
3.包装类
java·开发语言·包装类
honkun622 分钟前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js
BeiGuTing_code22 分钟前
Java动态数组(一)
java·数据结构·windows
我命由我1234532 分钟前
软件工程概念 - 可插拔性
java·后端·学习·java-ee·系统架构·软件工程·学习方法
爱勇宝38 分钟前
研究数字孪生的这半年,做了个 Demo,也有了一些新想法
前端·程序员
不可能片场1 小时前
工程实践 一个缓存把选片从十分钟压到一分钟
前端·electron
前端小万1 小时前
探索副业五个月,最终以放弃告终
前端·后端·面试
木易 士心1 小时前
Java 后端驱动远程手机自动化:ADB + Python + 内网穿透实战全解
java·后端·智能手机·自动化