zoukankan      html  css  js  c++  java
  • Spring异常处理@ExceptionHandler

    最近学习Spring时,认识到Spring异常处理的强大。之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑:

    复制代码
    1 try{
    2     ..........
    3 }catch(Exception1 e){
    4     ..........
    5 }catch(Exception2 e){
    6     ...........
    7 }catch(Exception3 e){
    8     ...........
    9 }
    复制代码

    Spring能够较好的处理这种问题,核心如下,文章主要关注前两个:

    • @ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
    • @ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开
    • @ResponseStatus:可以将某种异常映射为HTTP状态码

    @ExceptionHandler

    源码如下:

    复制代码
    1 @Target({ElementType.METHOD})
    2 @Retention(RetentionPolicy.RUNTIME)
    3 @Documented
    4 public @interface ExceptionHandler {
    5     Class<? extends Throwable>[] value() default {};
    6 }
    复制代码

    该注解作用对象为方法,并且在运行时有效,value()可以指定异常类。由该注解注释的方法可以具有灵活的输入参数(详细参见Spring API):

    • 异常参数:包括一般的异常或特定的异常(即自定义异常),如果注解没有指定异常类,会默认进行映射。
    • 请求或响应对象 (Servlet API or Portlet API): 你可以选择不同的类型,如ServletRequest/HttpServletRequest或PortleRequest/ActionRequest/RenderRequest
    • Session对象(Servlet API or Portlet API): HttpSession或PortletSession。
    • WebRequest或NativeWebRequest 
    • Locale
    • InputStream/Reader 
    • OutputStream/Writer 
    • Model

    方法返回值可以为:

    • ModelAndView对象
    • Model对象
    • Map对象
    • View对象
    • String对象
    • 还有@ResponseBody、HttpEntity<?>或ResponseEntity<?>,以及void

    @ControllerAdvice见《Spring3.2新注解@ControllerAdvice

  • 相关阅读:
    uniapp判断token多次登录问题
    vue强制刷新子组件到初始状态
    时间戳转化时间过滤器
    axios二次封装具有请求/响应拦截的http请求
    vue常见的工具函数
    解决npm i 初始化,core-js报错
    node环境变量配置
    scss基本使用
    Vue element-ui父组件控制子组件的表单校验
    antd-Calendar(日历)自动嵌入对应时间问题
  • 原文地址:https://www.cnblogs.com/duanxz/p/4746898.html
Copyright © 2011-2022 走看看