springmvc rest api和页面访问异常统一处理

springmvc 容器启动时,会自动初始化三个异常处理器类:

    1.ExceptionHandlerExceptionResolver
    2.ResponseStatusExceptionResolver
    3.DefaultHandlerExceptionResolver

且分别设置了相应的order 由上到下依次为0,1,2

这里ExceptionHandlerExceptionResolver 会使用@ExceptionHandler注解的方法来进行异常处理

由此想到一种分开处理restApi 和 页面异常的方法:

1.使用注解的方式定义异常处理类:

@ControllerAdvice
@ResponseBody//这里设置返回数据到响应体
public class RestExceptionHandler{

    private static final Logger log = LoggerFactory.getLogger(RestExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    public CommonResult handler(HandlerMethod handlerMethod,  Exception e){//这里引入handlerMethod

      
        Method m = handlerMethod.getMethod();

        Class<?> clazz = handlerMethod.getBeanType();
        //判断访问的url是否为rest 请求
        boolean isRestReq = (m.getAnnotation(ResponseBody.class)!=null||clazz.getAnnotation(ResponseBody.class)!=null
                ||clazz.getAnnotation(RestController.class)!=null);

        if(isRestReq){//如果为rest请求,则返回数据
            CommonResult cr = new CommonResult();
            cr.setMsg(e.getMessage());
            cr.setCode(500);

            return cr;
        }else{//如果不是rest请求,则抛出异常
            throw new RuntimeException("handler");
        }

    }

}

这里处理rest api 访问的异常,首先判断rest请求,这里通过判断注解的方式来判断,如果不是rest请求则抛出异常,交由后面的异常处理器处理

2.注入页面异常处理类:

<!--页面访问异常处理-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="/500"/>
    <property name="exceptionAttribute" value="error"/>
</bean>

这里处理页面请求

这样可以实现分开处理rest 和页面访问的异常 ,要求spring版本4.2.5及其以上

转载于:https://my.oschina.net/equkankan/blog/1835274

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值