05.服务端异常的统一处理

 

如果不是前后端分离,一般出了异常都很容易处理,直接跳转到相关的错误页面即可,现在前后端分离,出了异常,就不能再跳转到错误页面了,但是我们可以返回 JSON 呀!我们可以对服务端可能发生的异常进行统一处理。

举个栗子:

当管理员想要删除某一个角色的时候,如果该角色下尚有关联的用户或者资源,此时由于数据库中外键的约束会导致删除失败(我的业务逻辑就是如此,这里小伙伴不要和我扯 cascade),当删除失败时,会抛出一个 DataIntegrityViolationException 异常,我将这种异常捕获后统一处理。

5.1 处理方式

5.1.1 自定义异常处理类

自定义异常处理类 CustomExceptionResolver,如下:

public class CustomExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse response, Object o, Exception e) {
        ModelAndView mv = new ModelAndView(new MappingJackson2JsonView());
        Map<String, String> map = new HashMap<>();
        map.put("status", "error");
        if (e instanceof DataIntegrityViolationException) {
            map.put("msg", "该角色尚有关联的资源或用户,删除失败!");
        }
        mv.addAllObjects(map);
        return mv;
    }
}

在这里接收到系统抛出的各种异常,判断异常的类型,根据不同的类型,返回不同的提示,当然,我这里只有一种情况。

5.1.2 将 CustomExceptionResolver 注册为一个 Bean

将 CustomExceptionResolver 注册为 Bean 就比较简单了,可以直接在类上添加 @Component 注解,也可以通过 Java 进行配置,如下:

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public CustomExceptionResolver customExceptionResolver() {
        return new CustomExceptionResolver();
    }
}

两种方式任选一。

扫码关注微信公众号 江南一点雨,回复 2TB,获取超 2TB Java 学习教程~

喜欢这篇文章吗?扫码关注公众号【江南一点雨】【江南一点雨】专注于 SPRING BOOT+微服务以及前后端分离技术,每天推送原创技术干货,关注后回复 JAVA,领取松哥为你精心准备的 JAVA 干货!

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 Attribution-NonCommercial 4.0 International