博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc rest api和页面访问异常统一处理
阅读量:6927 次
发布时间:2019-06-27

本文共 1392 字,大约阅读时间需要 4 分钟。

hot3.png

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.注入页面异常处理类:

这里处理页面请求

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

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

你可能感兴趣的文章
Android 数字签名
查看>>
(已解决)access_token没过期,但已失效的问题{errcode:40001} 微信
查看>>
akka应用状态监控
查看>>
qt-embedd-linux4.8.2编译配置选项说明
查看>>
Maven pom.xml配置解读
查看>>
读写分离
查看>>
ILGeoNamesSearchController
查看>>
js学习笔记
查看>>
微博舆情监测
查看>>
Flink 幕后之内存管理
查看>>
javascript 学习笔记 【数组操作方法】
查看>>
Android 实现ListView的展开式动画ExpandAnimation
查看>>
【Shell脚本】逐行处理文本文件
查看>>
数据的序列化
查看>>
C++解逆波兰表达式
查看>>
Excel 处理重复数据的几种方法
查看>>
oracle 使用plsql 创建表空间,用户以及分配权限
查看>>
Java synchronized使用
查看>>
man手册的基本使用
查看>>
ios9---通讯录权限
查看>>