Spring统一异常处理之@ControllerAdvice 无法使用问题
来源:互联网 发布:游戏程序员必看书籍 编辑:程序博客网 时间:2024/05/21 05:17
最近项目使用@ControllerAdvice 进行配置全局的异常处理,但出现了@ControllerAdvice配置的类无法起作用。下面是我的异常处理类
/** * */package com.vkl.hblw.common.exception;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.servlet.ModelAndView;import com.vkl.hblw.common.constant.SystemInfo;import com.vkl.hblw.common.exception.bean.ServiceException;import com.vkl.hblw.service.exception.ExceptionService;/** * @author xcc * 统一异常处理类,所有的异常处理均在此类中处理。 */@ControllerAdvicepublic class GlobalExceptionHandler {private static final Logger log = Logger.getLogger(GlobalExceptionHandler.class);@Resourceprivate ExceptionService exceptionService;public ModelAndView model(String errorPage){ModelAndView mav = new ModelAndView(errorPage);mav.addObject("title", "访问出错");mav.addObject("message", "");return mav;}@ExceptionHandler(ServiceException.class) public ModelAndView serviceExceptionHandle(HttpServletRequest request, Exception ex){ log.error(SystemInfo.LOG_CODE_ERROR, ex); return model("/error"); }@ExceptionHandler(Exception.class) public ModelAndView exceptionHandle(HttpServletRequest request, Exception ex){ log.error(SystemInfo.LOG_CODE_ERROR, ex);exceptionService.insertYcxx(ex.getMessage(), ""); return model("/error"); } }
代码是没有任何问题的,网上一大堆。但无法起作用肯定是spring没有启动它。然后我加了个@EnableWebMvc在类
GlobalExceptionHandler上就OK了,@EnableWebMvc is equivalent to <mvc:annotation-driven /> in XML。之前我的spring配置XML里是没有加
<mvc:annotation-driven />的,所以我在XML里面加了<mvc:annotation-driven />,<mvc:annotation-driven/>
相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。
即解决了@Controller注解的使用前提配置。所以我之前用的拦截器org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
也要替换掉,否则会起冲突。
拦截器使用下面的配置方式
<!--配置拦截器, 多个拦截器,顺序执行 --> <mvc:interceptors> <mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/**" /> <bean class="com.vkl.hblw.setting.interceptor.CommonInterceptor"></bean> </mvc:interceptor> <mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> <mvc:mapping path="/**" /> <bean class="com.vkl.hblw.setting.interceptor.UserLoginProtectInterceptor"></bean> </mvc:interceptor> <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --> </mvc:interceptors>
这样就解决问题了。
阅读全文
0 0
- Spring统一异常处理之@ControllerAdvice 无法使用问题
- spring使用@ExceptionHandler、@ControllerAdvice统一异常处理
- spring mvc异常统一处理(使用ControllerAdvice注解)
- @controllerAdvice 统一处理异常(spring-mvc)
- SpringBoot 统一异常处理--- @ControllerAdvice 使用
- spring mvc异常统一处理(ControllerAdvice注解)
- spring mvc异常统一处理(ControllerAdvice注解)
- Spring中@ControllerAdvice注解配合@ExceptionHandler实现统一异常处理
- spring mvc异常统一处理(ControllerAdvice注解)
- spring mvc异常统一处理(ControllerAdvice注解)
- spring异常处理@ControllerAdvice
- SpringBoot 统一异常处理 @ControllerAdvice 失效
- Spring中的@ControllerAdvice注解配合@ExceptionHandler使用实现异常处理
- Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理
- Spring异常处理ControllerAdvice,实测成功
- springMVC使用@ControllerAdvice实现异常处理
- SpringMVC异常处理使用@ControllerAdvice注释
- springMVC使用@ControllerAdvice实现异常处理
- Python的逻辑控制true/false和循环
- JavaScript单线程运行机制与并发模型
- Spring中Aware系列接口
- Python起步之利用Turtle进行时钟绘制
- MAC地址小知识
- Spring统一异常处理之@ControllerAdvice 无法使用问题
- NGUI学习笔记(八):图片(UISprite)灰化效果
- 20、顺时针打印矩阵
- 插件加载---之一
- Linux下使用getopt函数来获取传入的参数
- Codeforces contest 295 recordings
- IPC之共享内存(3)
- Spring learn note
- 字符串匹配KMP算法