美文网首页Java
SpringMVC-异常处理

SpringMVC-异常处理

作者: 张明学 | 来源:发表于2020-06-14 22:02 被阅读0次

SpringMVC的异常处理是指统一包装异常的展示信息,实现HandlerExceptionResolver接口即可。

开发统一处理的异常解析器

public class GlobalExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object o,
                                         Exception e) {
        if (o instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) o;
            log.error("异常#Controller={},Method={}", handlerMethod.getBean(), handlerMethod.getMethod().getName(), e);
            // todo 判断属于Ajax的请求还是普通的页面请求
            if (isAsyncRequest(request, handlerMethod)) {
                // 返回JSON格式数据
                return buildJsonResponse(request, response, handlerMethod, e);
            } else {
                // 返回重定向页面
                return buildViewResponse(request, response, handlerMethod, e);
            }
        }
        return null;
    }

    /**
     * 构建JSON数据
     *
     * @return
     */
    private ModelAndView buildJsonResponse(HttpServletRequest request,
                                           HttpServletResponse response,
                                           HandlerMethod handlerMethod,
                                           Exception ex) {

        BaseResponse baseResponse = new BaseResponse().setCode("10").setMessage(ex.getMessage());
        // 使用jackson,也可以换成fastjson
        ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
        modelAndView.addObject("result", baseResponse);
        return modelAndView;
    }

    /**
     * 重定向错误页面
     *
     * @return
     */
    private ModelAndView buildViewResponse(HttpServletRequest request,
                                           HttpServletResponse response,
                                           HandlerMethod handlerMethod,
                                           Exception ex) {
        ModelAndView errorView = new ModelAndView();
        errorView.setViewName("redirect:/error-page");
        errorView.addObject("errorMessage", ex.getMessage());
        return errorView;
    }

    /**
     * 根据handlerMethod的注解来判断是不是ajax请求
     */
    public static boolean isAsyncRequest(HttpServletRequest request, HandlerMethod handlerMethod) {
        // 方法上有@ResponseBody 表示返回JSON
        ResponseBody responseBody = handlerMethod.getMethodAnnotation(ResponseBody.class);
        if (null != responseBody) {
            return true;
        }

        //判断Controller类上有没有@RestController
        RestController restController = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), RestController.class);
        if (null != restController) {
            return true;
        }

        //判断Controller类上有没有@ResponseBody
        responseBody = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), ResponseBody.class);
        if (null != responseBody) {
            return true;
        }
        return false;
    }
}

配置异常解析器

<bean id="globalExceptionResolver" class="com.zmx.GlobalExceptionResolver"/>

相关文章

  • SpringMVC-异常处理

    SpringMVC的异常处理是指统一包装异常的展示信息,实现HandlerExceptionResolver接口即...

  • SpringMVC-异常处理(二)

    通过实现HandlerExceptionResolver接口可以实现对处理的除理,但是还是会留掉一些异常如:Req...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • Java 异常

    异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...

  • 第十二章:异常处理

    异常处理语法格式: try: ...处理语句 except 异常类型: ...异常处理语句 pytho...

  • Spring MVC 全局统一异常处理(注解方式)

    全局异常处理 对异常处理类增加@ControllerAdvice 增加异常处理方法,使用@ExceptionHan...

  • [java]45、SpringMVC-请求处理

    1、SpringMVC简介 1.1、概念 SpringMVC[https://docs.spring.io/spr...

  • 异常处理设计文档

    一、异常处理流程说明 在ESB处理过程中,若发生异常,将进入异常流程的处理。一个异常处理流程大致如下: ESB处理...

  • Java异常处理机制

    什么是异常处理机制: 异常处理机制: 让程序发生异常时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序尽...

  • ASP .NET Core Web API_05_异常处理

    默认异常处理 自定义异常处理

网友评论

    本文标题:SpringMVC-异常处理

    本文链接:https://www.haomeiwen.com/subject/giafxktx.html