spingmvc统一异常处理,modelAndView 无法定位到指定页面

倚楼听风雨 2017-08-23 02:27:23
在做一个spirngmvc异常统一处理的功能,但是代码写好后,异常消息可以全局捕获,但是却不能返回至指定页面,而且将同一个页面在controller中用modelAndView可以返回,说明在但是在SystemExceptionResolver就不行。
百思不得其解,请求帮助。
相关代码:
1、定义一个异常类

public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 1L;

public BusinessException() {
super();
}

public BusinessException(String message, Throwable cause) {
super(message, cause);
}

public BusinessException(String message) {
super(message);
}

public BusinessException(Throwable cause) {
super(cause);
}

}

2、实现HandlerExceptionResolver统一处理异常

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class SystemExceptionResolver implements HandlerExceptionResolver{
private static org.slf4j.Logger logger = LoggerFactory.getLogger(SystemExceptionResolver.class);
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
BusinessException exception=null;
//如果抛出的是系统自定义的异常则直接转换
if(ex instanceof BusinessException) {
exception = (BusinessException) ex;
} else {
//如果抛出的不是系统自定义的异常则重新构造一个未知错误异常BusinessException
exception = new BusinessException("系统未知错误");
}
//向前台返回错误信息
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", exception);
logger.info(exception.getMessage());
modelAndView.setViewName("/sysui/system/error");
return modelAndView;
}
}

3、spring-mvc.xml配置视图解析器,配置SystemExceptionResolver

<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="atom" value="application/atom+xml" />
<entry key="html" value="text/html" />
<entry key="json" value="application/json" />
</map>
</property>
<property name="viewResolvers">
<list>
<bean
class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</list>
</property>
</bean>

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
<!-- 自定义的全局异常处理器 只要实现HandlerExceptionResolver接口就是全局异常处理器-->
<bean id="systemExceptionResolver" class="com.cicc.api.core.base.exception.SystemExceptionResolver"/>
...全文
673 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43289191 2020-01-23
  • 打赏
  • 举报
回复
我也是 难受
小风010766 2018-01-12
  • 打赏
  • 举报
回复
题主解决了么?我也碰到一样的问题

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧